扁平化包含键值对的对象数组

4

假设我有以下存储单个键值对的对象数组:

var someArray = [    {foo: 1},    {bar: 2}];

我希望您能将这个数组压平成一个单一的对象,其中原始对象中的每个键都成为新单一对象的属性,如下所示:
someObject = {
    foo: 1,
    bar: 2
}

我将始终拥有唯一的键,并且只会有一个键值对。
我知道如果我在 foreach 循环中循环数组,那么我只能访问项目的索引和值,例如:
0: {foo: 1}

我希望能够循环遍历,在访问项目时分别读取键和值,以便将其附加到我的新对象中。

我觉得lodash应该能够在这方面提供帮助,但我很难找到哪个方法能够帮助我。

有人能指点我一下吗?

谢谢。

3个回答

8

不需要使用lodash,您可以直接使用Object.assign()和扩展语法。

var someArray = [
  {foo: 1},
  {bar: 2}
];
var obj = Object.assign({}, ...someArray)
console.log(obj)

你可以使用apply代替展开语法。
var obj = Object.assign.apply({}, someArray)

var someArray = [
  {foo: 1},
  {bar: 2}
];
var obj = Object.assign.apply({}, someArray)
console.log(obj)


当你有 [ {foo: 1, bar: 1}, {foo: 2: bar:2}] 时,这个逻辑会稍微改变。你最终会得到第二个对象。是否可能调整这个逻辑,将所有关系放入一个单一的对象中? - Winnemucca
编写此案例的期望输出。 - Nenad Vracar
{ "foo": 1, "bar": 1, "foo": 2, "bar": 2 } - Winnemucca
这是无效的结果,您不能重复键。 - Nenad Vracar
{ "foo": 1, "bar": 2, "test": 3, "test2": 4 } 的程序相关内容翻译如下: - Winnemucca

3
你可以通过迭代并使用Object.assign来获取一个包含所有属性的新对象。

var someArray = [{ foo: 1 }, { bar: 2 }],
    result = someArray.reduce(function (r, a) {
        return Object.assign(r, a);
    }, {});

console.log(result);


1

可以使用reduceObject assign快速完成此操作:

var someArray = [
    {foo: 1},
    {bar: 2}
];
var result = someArray.reduce((acc, obj) => Object.assign(acc, obj), {})
console.log(result)
.as-console-wrapper { max-height: 100% !important; top: 0; }


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接