如何将对象的键/值组合成单个数组?

8
我有一个JavaScript对象,其中包含多个键,其值为对象数组。我正在尝试将所有键/值组合成单个对象数组。因此,从中获取:
{
    a: [{}, {}, {}],
    b: [{}, {}, {}],
    c: [{}, {}, {}]
}

To

[{}, {}, {}, {}, {}, ...]

我正在尝试类似于

Object.keys(myObject).map(key => myObject[key])

这导致一个包含3个数组的数组。我还尝试使用lodash并执行下列操作:
Object.keys(myObject).map(key => _.values(myObject[key]))

看起来这会导致同样的结果。我应该如何正确地做到这一点?最好是像我现在尝试的那样在一行内完成,而不是使用循环。如果这个问题已经被问过了,我很抱歉,我不知道如何表达这个问题以找到结果。


单个对象数组,就像问题中所提到的那样。编辑了问题以在可视上显示所需的结果。 - wizloc
你只想省略键值 a、b、c 吗? - Shubham Khatri
4个回答

4
你可以使用 concat 方法来合并对象的值。

var object = { a: [{}, {}, {}], b: [{}, {}, {}], c: [{}, {}, {}] },
    array = [].concat(...Object.values(object));

console.log(array);


1
确实,Object.values() 在这里更好 :) - kLabz
不支持IE,链接 - Dhaval
2
@Dhaval,这个问题里面有一个箭头函数,所以op正在使用ES6。 - Nina Scholz

2
你可以使用Array.prototype.reduce来生成一个包含所有嵌套对象的数组(这里仅处理一层嵌套,我不知道你需要多少层)。
var values = {
    a: [{}, {}, {}],
    b: [{}, {}, {}],
    c: [{}, {}, {}]
};

Object.keys(values).reduce(function(res, key) {
    return res.concat(values[key]);
}, []); // [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]

2
可以使用箭头函数和 concat 来简化代码(在 reduce 中),例如:reduce( (current, item) => current.concat( values[item] ) ) - Icepickle

1
在ES6中,如果键已知,可以简单地执行以下操作:

const array = [...obj.a, ...obj.b, ...obj.c];

这意味着需要事先知道密钥。 - kLabz
没错,这是个好建议,但我并不总是知道键名。 - wizloc

0
你可以在JavaScript中连接数组。以下是你问题的解决方案:
var data = {
    a: [{}, {}, {}],
    b: [{}, {}, {}],
    c: [{}, {}, {}]
}

var result = [];

for (var key in data ){
   result = result.concat(data [key]);
}

console.log(result);

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