Показать сообщение отдельно
  #7 (permalink)  
Старый 28.07.2019, 07:41
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от Русский
Мой всё равно более компактный и с рекурсией, как просили.
Если ваша компактность измеряется в количестве переводов строк, то я могу сделать более компактней...
function createTree(array = []) {
	var map = new Map();
	for(const item of array) if(map.has(item.parentId)) map.get(item.parentId).push(item); else map.set(item.parentId, [item]);
	for(const [parentId, items] of map) for(const item of items) if(map.has(item.id)) item.children = map.get(item.id);
	return map.get(null);
}
И тут уже есть определение функции createTree! А у вас его нет! Так где же ваша компактность, когда на каждый массив придётся писать...
const Новый_массив = Массив.filter(зн => зн.parentId === null).map(зн => Найти_выродков(Массив, зн));
против более компактного
createTree(Массив);
от Alexandroppolus!

Сообщение от Русский
и с рекурсией
Это предположение того, как, может быть, решается! Вы вправе предоставить более эффективный способ!

Последний раз редактировалось Malleys, 28.07.2019 в 07:44.
Ответить с цитированием