@lilkan
Начинающий разработчик

Как разбить многомерный объект?

есть глубокий объект вида
{
 name: "one"
 children: [
  { name: "two",
     children[{
         name: "three",
         children[]}]
},
{ name: "four",
     children[{
         name: "five",
         children[]}]
}
]
}

и т.д.

нужно из этого получить другой объект вида

{
one: [{listOfChildren}],
two: [{listOfChildren}]
three:[{listOfChildren}]
}


Если детей нет, то не создавать ключ:значение
  • Вопрос задан
  • 96 просмотров
Решения вопроса 1
Seasle
@Seasle Куратор тега JavaScript
Если конечно верно понял.
const collect = (entries, store = {}) => {
  for (const entry of entries) {
    const { name, ...data } = entry;
    
    if (data.children.length > 0) {
      store[name] = data;
      
      collect(data.children, store);
    }
  }

  return store;
};
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Aetae
@Aetae Куратор тега JavaScript
Тлен
Какие проблемы?
Хочешь - рекурсивно:
function toFlatMap(array, map = {}) {
	for(const {name, children} of array) {
    map[name] = children;
    toFlatMap(children, map);
  }
  return map;
}

Хочешь - линейно:
function toFlatMap(array, map = {}) {
  let stack = array.slice();
  let current;
	while(current = stack.shift()) {
    map[current.name] = current.children;
    stack.push(...current.children);
  }
  return map;
}
Ответ написан
Комментировать
@lilkan Автор вопроса
Начинающий разработчик
Всем спасибо, решение нашел сам)
Больше всего походе на решение Александр
let menu = {}

    function getMenu(obj){
        if(obj.children.length > 0){
            menu[obj.url] = obj.children
        }
        obj.children.map(i => getMenu(i))
         return menu;
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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