【问题标题】:How to combine object key/value into single array?如何将对象键/值组合成单个数组?
【发布时间】:2018-01-23 04:39:37
【问题描述】:

我有一个 javascript 对象,其中有几个键,其值是对象数组。我正在尝试将所有键/值组合成一个对象数组。所以从

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

到

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

我正在尝试类似的东西

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

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

我也尝试过使用 lodash 和做

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

这似乎导致了同样的事情。我怎样才能正确地做到这一点?最好像我尝试的那样在单行中而不是循环中。抱歉,如果已经问过这个问题,我不知道如何用这个问题来找到结果

【问题讨论】:

  • 问题中提到的单个对象数组。编辑问题以直观地显示所需的结果
  • 你只是想省略键,a,b,c

标签: javascript arrays


【解决方案1】:

您可以concat 对象的值。

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

console.log(array);

【讨论】:

  • 确实,Object.values() 在这里更好:)
  • 不支持 ie, link
  • @Dhaval,问题里面有箭头函数,所以op用的是ES6。
【解决方案2】:

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

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

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

【讨论】:

  • 通过使用箭头函数和concat(在reduce 内部)来保存一些输入,例如:reduce( (current, item) => current.concat( values[item] ) )
【解决方案3】:

在 ES6 中,如果密钥是已知的,您可以这样做:

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

【讨论】:

  • 不过,这意味着提前知道密钥。
  • 对。好建议,但我不会总是知道钥匙
【解决方案4】:

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

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

var result = [];

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

console.log(result);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多