Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.01.2021, 22:53
Аспирант
Отправить личное сообщение для misha.korolcov Посмотреть профиль Найти все сообщения от misha.korolcov
 
Регистрация: 05.09.2019
Сообщений: 82

reduce создания масива по обєктам
доброго времени суток надо сделать массив где сначала идет grop а затем его дети где айдишка совпадает и через 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 && findSuperGroup.idParent == acu.idMain){
         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'
 ]

Последний раз редактировалось misha.korolcov, 23.01.2021 в 23:53.
Ответить с цитированием
  #2 (permalink)  
Старый 24.01.2021, 00:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 29,911

misha.korolcov,
<script>
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 resaltCity = grop.map(obj => (obj.children = city.filter(({idMain}) => idMain == obj.idParent), obj));

document.write(`<pre>${JSON.stringify(resaltCity, "", 4)}</pre>`)
    </script>


темы создавать здесь Общие вопросы Javascript
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по методу reduce() hoz Общие вопросы Javascript 8 12.12.2018 19:45
Поиск и выбор папки с максимально поздней датой создания. Майя Общие вопросы Javascript 1 13.04.2012 16:11
Ищу программиста для сотрудничества, ищу программиста для создания браузерной игры He3HaUKa Javascript под браузер 3 25.04.2011 20:53