Как добавить объекты в другой массив объекта в альтернативной позиции? - PullRequest
0 голосов
/ 09 февраля 2020

Я работаю над компонентом реакции. Требуется добавить новый объект в альтернативной позиции в массиве объектов, например, ниже:

arr1 = [{test: 1},{test: 2},{test: 3},{test: 4}]

ожидаемый результат:

arr1 = [{test: 1},{dummy:1},{test: 2},{dummy:1},{test: 3},{dummy:1},{test: 4}]

Есть ли способ сделать то же самое в es6?

Ответы [ 3 ]

4 голосов
/ 09 февраля 2020

Для получения массива требуемый вы можете использовать метод concat в сочетании с reduce.

var array = [{test: 1},{test: 2},{test: 3},{test: 4}];
var result = array.reduce((res, item) => res.concat(item, {dummy: 1}), []).slice(0, -1);
    
console.log(result);

Поскольку это добавляет {dummy: 1} объект после каждого элемента из вашего массива, просто используйте

.slice(0, -1)

, чтобы добавить одно исключение для последнего элемента из вашего данного массива.

Если вы хотите изменить оригинальный массив на месте , вы можно использовать splice метод.

var array = [{test: 1},{test: 2},{test: 3},{test: 4}];
for(i = 0;i < array.length - 1; i = i + 2){
  array.splice(i + 1, 0, {dummy: 1});
}
console.log(array);
1 голос
/ 09 февраля 2020

Чтобы изменить исходный массив (вместо создания нового), вы можете сначала сгенерировать индексы, в которые нужно вставить новые элементы, а затем использовать Array.prototype.splice():

const a = [{test: 1}, {test: 2}, {test: 3}, {test: 4}];

Array.from({length: a.length - 1}, (_, i) => i * 2 + 1)
     .forEach(i => a.splice(i, 0, {dummy: 1}));

console.log(a);
1 голос
/ 09 февраля 2020

Мне нравится использовать карту, если я могу. Это легче понять и поддерживать.

Итак, сначала создайте массив массива, а затем сведите его в один массив с помощью flat.

let arr1 = [{test: 1},{test: 2},{test: 3},{test: 4}]

arr1 = arr1.map(item=>[item,{dummy:1}]).flat().slice(0, -1)

console.log(arr1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...