没有标准的lib函数,该函数允许在.eslintrc
上执行"extends": [
"airbnb",
"plugin:react-redux/recommended",
"plugin:promise/recommended"
],
"parser": "babel-eslint",
"parserOptions": {
"ecmaVersion": 8,
"ecmaFeatures": {
"experimentalObjectRestSpread": true,
"impliedStrict": true,
"classes": true
}
},
"env": {
"browser": true,
"node": true,
"jquery": true,
"jest": true
},
"plugins": [
"react-redux",
"promise"
],
函数:
map_values
我发现的最好方法是:
map
由于我经常使用它,因此我发现它很重...
答案 0 :(得分:4)
我不这么认为,但是您可以使用Map.new/2
更简洁地做到这一点:
iex> Map.new(%{a: 30, b: 45}, fn {k, v} -> {k, v * 2} end)
%{a: 60, b: 90}
答案 1 :(得分:3)
另一种替代方法是理解,例如
a = %{a: 30, b: 45}
for {k, v} <- a, into: %{} do
{k, v + 1}
end
输出:
%{a: 31, b: 46}
通过这种方式,您不会创建中间列表,因为Enum.map
返回一个列表,然后您需要将其转换为map。
这里的重要部分是into: %{}
,因为如果您省略它,默认情况下它将返回一个列表。
答案 2 :(得分:2)
虽然已经给出的答案是完全正确的,但为了详尽无遗,我将发布另一个变体:Enum.into/3
也可以使用,因为Map
实现了{{3} } 协议。
Enum.into(%{a: 30, b: 45}, %{}, fn {k, v} -> {k, v * 2} end)
#⇒ %{a: 60, b: 90}