Javascript 如何将对象数组转换为Lodash中的对象?
我有这个:Javascript 如何将对象数组转换为Lodash中的对象?,javascript,arrays,object,lodash,Javascript,Arrays,Object,Lodash,我有这个: [ { list: [ [Object], [Object] ] }, { head: [ [Object], [Object] ] } ] 想把它变成这样: { list: [ [Object], [Object] ], head: [
[ { list:
[ [Object],
[Object] ] },
{ head:
[ [Object],
[Object] ] }
]
想把它变成这样:
{ list:
[ [Object],
[Object] ],
head: [ [Object],
[Object] ]
}
因此,将一个对象数组转换为一个对象。使用lodash实现这一点将是非常棒的。以下是一个较短的版本:
_.reduce(array, function(memo, current) { return _.assign(memo, current) }, {})
_.transform(array, _.ary(_.extend, 2), {});
函数类似,只是它不希望您返回任何内容。由于正在修改它的第一个参数,我们可以直接将其传递给
transform()
。它被包装起来,以确保只向它传递2个参数。我认为更短的解决方案是:
Object.assign({}, ...array)
我知道你要的是lodash,但你似乎根本不需要这种方式。除非您想使用
。扩展请在lodash 4上使用fromPairs
uu.fromPairs([['fred',30],'barney',40]]代码>要在@rcsole的伟大答案的基础上进一步完善,这一点非常有效:
states = [{
state: "NY",
name: "New York",
}, {
state: "AZ",
name: "Arizona",
}]
statesObj = Object.assign({}, ...states.map(state => {
return { [state.state]: state.name }
}))
结果:
这是怎么回事?
让我们将其分解为多个部分:
// 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
迭代数组中的每个项(每个状态对象)<代码>映射
为每个状态
对象执行一个函数,并返回一个新对象,状态作为键,名称作为值。我们需要将state.state
括在括号中,因为它是对象文本中的动态值
步骤2使用Object.assign
将mappedStates
数组中的所有新状态对象合并到一个新对象中(第一个参数,{}
)。
这三个点是用来做什么的?那是spread操作员。它接受mappedStates
数组中的每个元素,并将它们转换为对象.assign
方法的直接参数
这个例子说明:
Object.assign({}, ...mappedStates)
与
Object.assign({}, {AZ: "Arizona"}, {NY: "New York"})
就这样 我对Java或lodash一无所知,但如果你做过任何研究,如果你也分享一下,这真的会很有帮助!;)感谢您展示方括号的使用,按名称创建对象属性。也许我的js已经损坏了,但这只是让我得到了作为对象的最后一个元素。然而,这有一个有趣的结果:Object.assign({},…rows.map(x=>{return{[x.name]:false}))代码>下面是相同的@terary,你能分享你的对象是什么样子吗?{“列表”:[{“一些”:“object1”},{“一些”:“object2”}],“头”:[{“一些”:“object3”},{“一些”:“object4”}]}节点v12.19对不起,我想我应该问一下你原来的数组是什么样子的?或者是您试图转换的列表
属性?
Object.assign({}, {AZ: "Arizona"}, {NY: "New York"})