Задать вопрос

Как произвести слияние массива объектов с другим массивом объектов?

Есть два массива объектов:

const arr1 = [{i:0, w: 2}, {i:0, w: 2},{i:0, w: 2},{i:0, w: 2},{i:0, w: 2},{i:0, w: 2}]
const arr2 = [{i:2, d: 4}, {i:3, g: 2}]

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

const res =  [{i:0, w: 2, i:2, d: 4},{i:0, w: 2, i:3, g: 2},{i:0, w: 2},{i:0, w: 2},{i:0, w: 2},{i:0, w:2}]
  • Вопрос задан
  • 166 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Массивы складываем в массив: const arrs = [ arr1, arr2 ];.

Дальше можно сделать просто:

const result = arrs.reduce((acc, n) => (
  n.forEach((m, i) => Object.assign(acc[i] ??= {}, m)),
  acc
), []);

Или сложно:

function* zip(data, defaultValue = null) {
  const iterators = Array.from(data, n => n[Symbol.iterator]());

  for (let doneAll = false; doneAll = !doneAll;) {
    const values = [];

    for (const n of iterators) {
      const { value, done } = n.next();
      values.push(done ? defaultValue : value);
      doneAll &&= done;
    }

    if (!doneAll) {
      yield values;
    }
  }
}


const result = Array.from(zip(arrs), n => Object.assign({}, ...n));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы