dataarray
@dataarray

Как получить массив массивов с 2-мя объектами из 2-ух массивов с объектами?

Вопрос: Как получить массив (см. ниже arrThree) с n-ым количеством массивов, где в каждом таком массиве находятся два объекта ~ из двух массивов с объектами (arrOne и arrTwo)?

1. В массивах arrOne и arrTwo всегда одинаковое количество объектов
2. Количество объектов в массивах arrOne и arrTwo всегда – чётное (2, 4, 6, 8, ... )
3. Массив объектов формируется по принципу 1-ый объект из 1-го массива arrOne и 1-ый объект из 2-го массива arrTwo, 2-ой объект из 1-го массива arrOne и 2-ой объект из 2-го массива arrTwo . . . и т.д.

Массив arrOne
[
  {
    path: './name-1.jpg',
    filename: 'name-1'
  },
  {
    path: './name-3.jpg',
    filename: 'name-3'
  },
  {
    path: './name-5.jpg',
    filename: 'name-5'
  }
]


Массив arrTwo
[
  {
    path: './name-2.jpg',
    filename: 'name-2'
  },
  {
    path: './name-4.jpg',
    filename: 'name-4'
  },
  {
    path: './name-6.jpg',
    filename: 'name-6'
  }
]


Массив arrThree – нужно получить
[
 [
  {
    path: './name-1.jpg',
    filename: 'name-1'
  },
  {
    path: './name-2.jpg',
    filename: 'name-2'
  }
 ],
 [
  {
    path: './name-3.jpg',
    filename: 'name-3'
  },
  {
    path: './name-4.jpg',
    filename: 'name-4'
  }
 ],
 [
  {
    path: './name-5.jpg',
    filename: 'name-5'
  },
  {
    path: './name-6.jpg',
    filename: 'name-6'
  }
 ]
]
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const zip = (...arrs) => arrs[0]?.map((n, i) => arrs.map(m => m[i])) ?? [];

// или

const zip = (...arrs) =>
  arrs.reduce((acc, n, i) => (
    n.forEach((m, j) => (acc[j] ??= [])[i] = m),
    acc
  ), []);

// или

const zip = (...arrs) => Array.from(
  { length: Math.max(...arrs.map(n => n.length)) },
  (n, i) => arrs.map(m => m[i])
);


const arr = zip(arr1, arr2);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы