当且仅当该密钥存在时,我如何更新 Clojure 中的密钥?

Mic*_*haw 1 clojure

假设我有一个这样的对象:

{
  "yucky-key": "value",
  "another-key": "value"
}
Run Code Online (Sandbox Code Playgroud)

我怎么能把那个对象改成这样?

{
  "better-key": "value",
  "another-key": "value"
}
Run Code Online (Sandbox Code Playgroud)

如果yucky-key不存在,我希望输入不变地返回。

我查看了update对值起作用的函数。但我没有看到类似的按键功能。

jas*_*jas 5

您可以使用rename-keysin更改密钥clojure.set

user> (def m {"yucky-key" "value",  "another-key" "value"})
#'user/m

user> (clojure.set/rename-keys m {"yucky-key" "better-key"})
{"another-key" "value", "better-key" "value"}
Run Code Online (Sandbox Code Playgroud)

如果要更改的键不存在,则返回原始地图

user> (def m2 {"okay-key" "value",  "another-key" "value"})
#'user/m2

user> (clojure.set/rename-keys m2 {"yucky-key" "better-key"})
{"okay-key" "value", "another-key" "value"}
Run Code Online (Sandbox Code Playgroud)