Как с помощью reduce() создать составной массив объектов?

Мне надо сделать массив, где сначала идет элемент из grop, а затем его дети из city, где id совпадает. Через reduce().

Вот, что у меня получилось:
const grop = [
    {name: 'merseded', groupName: 'avto', idParent: '11' }, 
    {name: 'bmv', groupName: 'avto', idParent: '20' } 
   ] 
const city = [{name: 'test1', idMain: '11'},
              {name: 'test2', idMain: '11'}, 
              {name: 'test3', idMain: '20'},
              {name: 'test4', idMain: '11'}]

const resalt = [...grop, ...city]
console.log(resalt)
const resaltCity = resalt.reduce((acu, cur) => {
     const findSuperGroup = acu.find(el => el.groupName  == cur.groupName);
   
    if (findSuperGroup){
         return [...acu.filter(item => item.groupName !== null ), {...cur}]
       } else {
           
       }
        return [...acu, {...cur}];
}, []);

console.log('resaltCity', resaltCity)

А должно быть:
const gropResalt = [
  { name: 'merseded', groupName: 'avto', idParent: '11' },
  { name: 'test', idMain: '11' },
  { name: 'test', idMain: '11' },
  { name: 'test', idMain: '11' },
  { name: 'bmv', groupName: 'avto', idParent: '20' },
  { name: 'test', idMain: '20' }
]
  • Вопрос задан
  • 79 просмотров
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
const result = grop.reduce((acc, el) => acc.concat(el, city.filter((c) => c.idMain === el.idParent)), []);
result
/*
[
  {
    "name": "merseded",
    "groupName": "avto",
    "idParent": "11"
  },
  {
    "name": "test1",
    "idMain": "11"
  },
  {
    "name": "test2",
    "idMain": "11"
  },
  {
    "name": "test4",
    "idMain": "11"
  },
  {
    "name": "bmv",
    "groupName": "avto",
    "idParent": "20"
  },
  {
    "name": "test3",
    "idMain": "20"
  }
]
*/
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
Artezio Санкт-Петербург
от 160 000 до 220 000 ₽