在 @rcsole 给出的精彩答案基础上,这个方法很有效:
states = [{
state: "NY",
name: "New York",
}, {
state: "AZ",
name: "Arizona",
}]
statesObj = Object.assign({}, ...states.map(state => {
return { [state.state]: state.name }
}))
结果:
{
AZ: "Arizona",
NY: "New York",
}
这里发生了什么?
让我们将其分解成多个部分:
mappedStates = states.map(state => { return { [state.state]: state.name } })
statesObj = Object.assign({}, ...mappedStates)
第一步使用 map
迭代数组中的每个项(每个状态对象)。map
对每个 state
对象执行一个函数,并返回一个新对象,其中状态为键,名称为值。我们需要在对象文本中将 state.state
用括号括起来,因为它是一个动态值。
第二步使用 Object.assign
将 mappedStates
数组中的所有新状态对象合并到一个新对象中(第一个参数为 {}
)。
三个点 ...
是什么意思?那是扩展运算符,它将 mappedStates
数组中的每个元素转换为 Object.assign
方法的直接参数。
这个例子很清楚:
Object.assign({}, ...mappedStates)
等同于
Object.assign({}, {AZ: "Arizona"}, {NY: "New York"})
就是这样了!