合并数组节点JS

时间:2019-02-07 20:15:52

标签: javascript arrays node.js merge

我想知道如何合并一个数组数组。例如,我有以下数组:

[ [ {marca: 'fiat', modelo: 'palio'} ], [ {marca: 'nissan', modelo: 'march'} ] ]

在合并上面的数组后,我想得到这个数组:

[ {marca: 'fiat', modelo: 'palio'}, {marca: 'nissan', modelo: 'march'} ]

谢谢,谢谢。

7 个答案:

答案 0 :(得分:2)

您可以将ES6-spread operator与Array.reduce结合使用,例如

const arr = [ [ {marca: 'fiat', modelo: 'palio'} ], [ {marca: 'nissan', modelo: 'march'} ] ];
console.log(arr.reduce((a, b) => [...a, ...b], [])); 

答案 1 :(得分:2)

您可以尝试使用新的但仍处于实验阶段的flat()数组方法...

const input = [
  [ {marca: 'fiat', modelo: 'palio'} ],
  [ {marca: 'nissan', modelo: 'march'} ]
];

console.log(input.flat());

或者也可以像这样使用reduce()

const input = [
  [ {marca: 'fiat', modelo: 'palio'}, {marca: 'fiat', modelo: 'fiesta'} ],
  [ {marca: 'nissan', modelo: 'march'} ]
];

let res = input.reduce((acc, curr) => acc.push(...curr) && acc, []);

console.log(res);

答案 2 :(得分:0)

有多种方法可以完成此操作。假设您的输入数据是输入数组的每一项都是具有一项的数组本身,那么使用Array#map就足够了:

const input = [
  [{
    marca: 'fiat',
    modelo: 'palio'
  }],
  [{
    marca: 'nissan',
    modelo: 'march'
  }]
];

/* 
For each subArray of input array where the subArray
is known to have a single element, extract that single
element and return it as the result of each map iteration 
*/
const output = input.map(([item]) => item)

console.log(output)

或者,对于更通用的解决方案,它“展平”具有可变长度的数组项的数组,您可以通过Array#reduce来实现,如下所示:

const input = [
  [{
    marca: 'fiat',
    modelo: 'palio'
  }, {
    test: 'foo'
  }],
  [{
    marca: 'nissan',
    modelo: 'march'
  }]
];

const output = input.reduce((finalArray, subArray) => {
  
  /* 
  For each item being iterated during reduce, concat
  the subArray to the finalArray 
  */
  return finalArray.concat(subArray);

}, [])

console.log(output)

答案 3 :(得分:0)

记录下来,如果您使用的是NodeJ,则有一个名为array-flatten的软件包,您可以使用

安装它
npm install array-flatten --save

例如:

var flatten = require('array-flatten')

flatten([1, [2, [3, [4, [5], 6], 7], 8], 9])
//=> [1, 2, 3, 4, 5, 6, 7, 8, 9]

https://www.npmjs.com/package/array-flatten

答案 4 :(得分:0)

有几种方法可以这样做,我建议使用Reduce,因为不需要时不需要安装npm软件包。

let arrays = [
  [{
    marca: 'fiat',
    modelo: 'palio'
  }],
  [{
    marca: 'nissan',
    modelo: 'march'
  }]
]

arrays = arrays.reduce((a, b) => a.concat(b), []);

console.log(arrays);

答案 5 :(得分:0)

我用lodash的flattenDeep方法来解决它。 例如:

_.flattenDeep(Array)

谢谢大家的回答。

答案 6 :(得分:0)

在实现的地方,您可以使用标准的Array's flat方法:

let arr = [ [ {marca: 'fiat', modelo: 'palio'} ], [ {marca: 'nissan', modelo: 'march'} ] ];

console.log(arr.flat());

或者,如果它只是一个浅平面,则可以使用concat和散布运算符获得相同的结果:

console.log([].concat(...arr));