@Quambaras

Как запушить один массив с массивами в другой, по нужным значениям объекта?

имеется первый массив в который надо запушить
const arr1 = [
      [
        {name: 'Name11', init: 1},
        {name: 'Name12', init: 1},
        {name: 'Name13', init: 1}
      ],
      [
        {name: 'Name1', init: 2},
        {name: 'Name2', init: 2},
      ],
      [
        {name: 'Name111', init: 3},
        {name: 'Name222', init: 3},
      ]
    ]


массив который надо запушить:
const arr2 = [
      [
        {name: 'Name14', init: 1},
      ],
      [
        {name: 'Name3', init: 2},
        {name: 'Name4', init: 2},
      ]
    ]

в arr1 надо запушить объекты массива arr2, запушить исходя из поля init. К примеру arr1 содержит под индексом 0 массив у которого объекты с полями init: 1, соответственно из arr2 надо запушить в массив объекты которые тоже содержат init: 1

количество может быть разное, в том числе и в arr2 может содержаться init: 4, которого нету в arr1 и для него надо создать отдельный массив.
примерно должно выглядеть так:
[
      [
        {name: 'Name11', init: 1},
        {name: 'Name12', init: 1},
        {name: 'Name13', init: 1},
        {name: 'Name14', init: 1}
      ],
      [
        {name: 'Name1', init: 2},
        {name: 'Name2', init: 2},
        {name: 'Name3', init: 2},
        {name: 'Name4', init: 2}
      ],
      [
        {name: 'Name111', init: 3},
        {name: 'Name222', init: 3},
      ]
    ]
  • Вопрос задан
  • 116 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Azperin
Дилетант
Чтоб не искать индексы, можно их просто замапить
let initToIndex = arr1.reduce((acc, item, idx) => {
	acc[item[0].init] = idx;
	return acc;
}, {});

arr2.flat().forEach(x => {
	let idx = initToIndex[x.init];
	if (!initToIndex.hasOwnProperty(x.init)) {
		idx = arr1.push([]) - 1;
		initToIndex[x.init] = idx;
	};
	
	arr1[idx].push(x);
	
});
Ответ написан
Ваш ответ на вопрос

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

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