以最有效的方式重组对象的JavaScript数组

时间:2019-12-30 15:38:00

标签: javascript arrays

我有一个对象数组,这些对象都共享具有相同名称的密钥,products ...我很难将所有值都放在第一个products之下,而删除其他两个products键。我已经尝试过使用unshift()的各种方法,但还是要弄乱它。重组数组的最有效,最简单的方法是什么。

现在的样子:

[ { products:
     [ [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object] ] },
  { products:
     [ [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object] ] },
  { products:
     [ [Object],
       [Object],
       [Object],
       [Object] ] } ]

应该是什么样子

[ { products: [Object], [Object], etc...

2 个答案:

答案 0 :(得分:1)

您所需的输出格式错误,但是从描述中我会得到一个包含产品对象的数组。我认为没有必要再在一个对象中保留连接的数组,而该对象又位于只有一个对象的数组中。

因此,只需使其成为一个数组,然后将其分配给products变量即可。您可以为此使用flatMap

let arr = [
    { products: [{a: 1}, {b: 2}] },
    { products: [{c: 3}, {d: 4}] },
    { products: [{e: 5}, {f: 6}] }
];

let products = arr.flatMap(({products}) => products);

console.log(products);

// If you REALLY need it in an array with one object:
let obese = [{products}];
console.log(obese);

答案 1 :(得分:1)

由于所需的输出无效的JavaScript,我推断出有效的语法:

const ary = [{products: ['a', 'b', 'c']}, {products: ['m', 'n']}, {products: ['x', 'y']}];

const result = {products: ary.reduce((accum, obj) => [...accum, ...obj.products], [])};

console.log(result) // output => {products: ['a', 'b', 'c', 'm', 'n', 'x', 'y']}