Перенос объектов одного массива в свойства объекта из другого массива по ID

подскажите пожалуйста как из


const arr1 = [
            {name: 'aaaaa', id: 1 },
            {name: 'bbbbbb', id: 2 },
            {name: 'ccccc', id: 3 },
            {name: 'aaaasds', id: 4 },
            {name: 'asdsada', id: 5 },
            {name: 'asdsadasd', id: 6 },
        ]
        const arr2 = [
            {name: 'adsaszzc123213', ids: 1 },
            {name: 'bbbbbb', ids: 1 },
            {name: 'ccccc', ids: 6 },
            {name: 'asdas dxc zz ', ids: 2 },
            {name: 'zxc zx czx c', ids: 2 },
            {name: 'zxc zx czx cz', ids: 6 },
            {name: 'adsaszzc123213', ids: 1 },
            {name: '111', ids: 1 },
            {name: 'ccccc', ids: 3 },
            {name: 'zxc dxc zz ', ids: 3 },
            {name: 'zxc zx 111111111czx c', ids: 5 },
            {name: 'zxc zx czx cz', ids: 4 },
        ]


сделать

const arr1 = [
            {name: 'aaaaa', id: 1,
                childs: [
                    {name: 'adsaszzc123213', ids: 1 },
                    {name: 'bbbbbb', ids: 1 },
                    {name: 'adsaszzc123213', ids: 1 },
                    {name: '111', ids: 1 }
                ]
             },
            {name: 'bbbbbb', id: 2,
                childs: [
                    {name: 'asdas dxc zz ', ids: 2 },
                    {name: 'zxc zx czx c', ids: 2 }
                ]
            },
            {name: 'ccccc', id: 3,
                child: [
                    {name: 'ccccc', ids: 3 },
                    {name: 'zxc dxc zz ', ids: 3 }
                ]
            },
            {name: 'aaaasds', id: 4, childs: [{name: 'zxc zx czx cz', ids: 4 }]},
            {name: 'asdsada', id: 5, childs: [{name: 'zxc zx 111111111czx c', ids: 5 }]},
            {name: 'asdsadasd', id: 6, 
                child: [
                    {name: 'ccccc', ids: 6 },
                    {name: 'zxc zx czx cz', ids: 6 }
                ]
             },
        ]

Ответы (2 шт):

Автор решения: Leonid

Используя метод .forEach() перебираем каждый элемент массива arr1, получая его как item. Затем этому item определяем новое свойство childs в которое из массива arr2 с помощью метода filter помещаем новый массив элементов, в которых ids совпадает с item.id.

  const arr1 = [
    {name: 'aaaaa', id: 1 },
    {name: 'bbbbbb', id: 2 },
    {name: 'ccccc', id: 3 },
    {name: 'aaaasds', id: 4 },
    {name: 'asdsada', id: 5 },
    {name: 'asdsadasd', id: 6 },
  ]
const arr2 = [
    {name: 'adsaszzc123213', ids: 1 },
    {name: 'bbbbbb', ids: 1 },
    {name: 'ccccc', ids: 6 },
    {name: 'asdas dxc zz ', ids: 2 },
    {name: 'zxc zx czx c', ids: 2 },
    {name: 'zxc zx czx cz', ids: 6 },
    {name: 'adsaszzc123213', ids: 1 },
    {name: '111', ids: 1 },
    {name: 'ccccc', ids: 3 },
    {name: 'zxc dxc zz ', ids: 3 },
    {name: 'zxc zx 111111111czx c', ids: 5 },
    {name: 'zxc zx czx cz', ids: 4 },
  ]

arr1.forEach(item => {item.childs = arr2.filter(i => i.ids === item.id);});
console.log(arr1);

  

→ Ссылка
Автор решения: yar85

Решение без лишних вложенных циклов, в 2 прохода (по одному на каждый массив):

const arr1 = [
  { name: 'aaaaa', id: 1 },
  { name: 'bbbbbb', id: 2 },
  { name: 'ccccc', id: 3 },
  { name: 'aaaasds', id: 4 },
  { name: 'asdsada', id: 5 },
  { name: 'asdsadasd', id: 6 },
];
const arr2 = [
  { name: 'adsaszzc123213', ids: 1 },
  { name: 'bbbbbb', ids: 1 },
  { name: 'ccccc', ids: 6 },
  { name: 'asdas dxc zz ', ids: 2 },
  { name: 'zxc zx czx c', ids: 2 },
  { name: 'zxc zx czx cz', ids: 6 },
  { name: 'adsaszzc123213', ids: 1 },
  { name: '111', ids: 1 },
  { name: 'ccccc', ids: 3 },
  { name: 'zxc dxc zz ', ids: 3 },
  { name: 'zxc zx 111111111czx c', ids: 5 },
  { name: 'zxc zx czx cz', ids: 4 },
];

const map = arr1.reduce(
  (m, item1) => m.set(item1.id, Object.assign(item1, { childs: [] }))
, new Map());
for (const item2 of arr2)
  map.get(item2.ids).childs.push(item2);

console.log(arr1);

Именно в данном случае, сокращение числа проходов может дать улучшение в скорости только если избавиться от "паразитных" вызовов и создания временного объекта (да и то не гарантированно) - но это детали, которые не должны отвлекать от главной мысли: задачи подобные этой, возможно решить в два прохода, если использовать хэштаблицу для индексации элементов по полю группировки значений.

→ Ссылка