我有这个:
[ { list:
[ [Object],
[Object] ] },
{ head:
[ [Object],
[Object] ] }
]
想把它变成这个:
{ list:
[ [Object],
[Object] ],
head: [ [Object],
[Object] ]
}
所以对象数组到对象中。用lodash实现这一目标会很棒。
答案 0 :(得分:19)
_.reduce(array, function(memo, current) { return _.assign(memo, current) }, {})
答案 1 :(得分:12)
我认为更简短的解决方案是:
Object.assign({}, ...array)
我知道你要求lodash,但看起来你甚至不需要这样。除非你想使用_.extend
。
答案 2 :(得分:8)
这是一个较短的版本:
_.transform(array, _.ary(_.extend, 2), {});
transform()函数类似于reduce(),除非它不期望您返回任何内容。由于extend()正在改变它的第一个参数,我们可以直接将其传递给transform()
。它包含在ary()中,以确保它只传递2个参数。
答案 3 :(得分:5)
要建立@ 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",
}
让我们把它分成几部分:
// Step 1: Transform from [{state: "Foo", name: "Bar"}, ...] to [{Foo: "Bar"}, ...]
mappedStates = states.map(state => { return { [state.state]: state.name } })
// Step 2: Merge all the objects in that array into a single new object
statesObj = Object.assign({}, ...mappedStates)
步骤1使用map
迭代数组中的每个项目(每个状态对象)。 map
为每个state
对象执行一个函数,并返回一个新对象,其状态为键,名称为值。我们需要将state.state
括在括号中,因为它是对象文字中的动态值。
步骤2使用Object.assign
将mappedStates
数组中的所有新状态对象合并为一个新对象(第一个参数{}
)。
三个点...
是什么?那是传播运营商。它接受mappedStates
数组中的每个元素,并将它们转换为Object.assign
方法的直接参数。
这个例子说得很清楚:
Object.assign({}, ...mappedStates)
与
相同Object.assign({}, {AZ: "Arizona"}, {NY: "New York"})
就是这样!
答案 4 :(得分:1)
Use fromPairs on lodash 4. https://lodash.com/docs#fromPairs
_.fromPairs([['fred', 30], ['barney', 40]]);