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"})