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

时间:2018-01-17 16:21:55

标签: javascript arrays

我有一个带有几个键的javascript对象,其值是对象数组。我试图将所有键/值组合成一个对象数组。所以来自

{
    a: [{}, {}, {}],
    b: [{}, {}, {}],
    c: [{}, {}, {}]
}

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

我正在尝试像

这样的东西
Object.keys(myObject).map(key => myObject[key])

这会产生一个包含3个数组的数组。

我也尝试过使用lodash并执行

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

这似乎导致了同样的事情。我该怎么做呢?最好是像我一样尝试而不是循环。对不起,如果已经提出这个问题,我不知道该怎么说出问题来找到结果

4 个答案:

答案 0 :(得分:3)

您可以concat对象的值。

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

console.log(array);

答案 1 :(得分:1)

你可以使用Array.prototype.reduce生成一个包含所有嵌套对象的数组(这里只处理一层嵌套,我不知道你想要多少)。

var values = {
    a: [{}, {}, {}],
    b: [{}, {}, {}],
    c: [{}, {}, {}]
};

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

答案 2 :(得分:1)

在ES6中,如果已知密钥,您只需执行以下操作:

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

答案 3 :(得分:0)

您可以在JavaScript中连接数组。以下是您问题的解决方案:

var data = {
    a: [{}, {}, {}],
    b: [{}, {}, {}],
    c: [{}, {}, {}]
}

var result = [];

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

console.log(result);