Объединить массив массивов |NodeJS - PullRequest
0 голосов
/ 07 февраля 2019

Я хотел бы знать, как я могу объединить массив массивов.Например, у меня есть следующий массив:

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

Я бы хотел получить этот массив после объединения указанного выше массива:

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

Спасибо, ребята, я ценю это.

Ответы [ 7 ]

0 голосов
/ 07 февраля 2019

Я использовал метод lodash flattenDeep для его решения.Например:

_.flattenDeep(Array)

Спасибо всем за ответы.

0 голосов
/ 08 февраля 2019

Где реализовано, вы можете использовать стандартный метод плоского массива :

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

console.log(arr.flat());

В качестве альтернативы, если это просто мелкая квартира, вы можете получить тот же результат с помощью concatи оператор распространения:

console.log([].concat(...arr));
0 голосов
/ 07 февраля 2019

Есть несколько способов сделать это, я бы порекомендовал Уменьшить , так как нет необходимости устанавливать пакеты npm, когда они не нужны.

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

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

console.log(arrays);
0 голосов
/ 07 февраля 2019

Для записи, если вы используете NodeJs, есть пакет с именем 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

0 голосов
/ 07 февраля 2019

Есть несколько способов сделать это.Предполагая, что ваши входные данные таковы, что каждый элемент входного массива является самим массивом с одним элементом, использование 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)
0 голосов
/ 07 февраля 2019

Вы можете попробовать новый, но все же экспериментальный, flat () метод массивов ...

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

console.log(input.flat());

Или в качестве альтернативы используйте lower () , например:

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);
0 голосов
/ 07 февраля 2019

Вы можете использовать оператор ES6 в сочетании с Array.reduce, например,

const arr = [ [ {marca: 'fiat', modelo: 'palio'} ], [ {marca: 'nissan', modelo: 'march'} ] ];
console.log(arr.reduce((a, b) => [...a, ...b], [])); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...