вложенность мотет быть неограниченной
const array1 = [
{page: '1.ru', title: 'title 1'},
{page: '3.ru', title: 'title 3'},
{page: '6.ru', title: 'title 6'},
];
const array2 = [
{page: '666.ru', title: 'title 666', referer: '66.ru'},
{page: '33.ru', title: 'title 33', referer: '3.ru'},
{page: '66.ru', title: 'title 66', referer: '6.ru'},
];
function createTree(roots, notRoots) {
if (!roots || !roots.length) { return []; }
const childsMap = new Map();
// строим карту (page => список_чилдов), создавая узлы дерева для чилдов
notRoots.forEach((child) => {
let childs = childsMap.get(child.referer);
if (!childs) {
childs = [];
childsMap.set(child.referer, childs);
}
childs.push({
page: child.page,
title: child.title,
});
});
// всем чилдам (вновь созданным узлам), которые попали в карту, проставляем чилдов
childsMap.forEach((childs) => {
childs.forEach((child) => {
child.childs = childsMap.get(child.page) || [];
})
});
// обходим корневые элементы, создаем для них узлы дерева, подставляем чилды по карте
return roots.map((root) => {
return {
page: root.page,
title: root.title,
childs: childsMap.get(root.page) || []
};
})
}
console.log(createTree(array1, array2));
fn()
раньше, чем в месте, где она впервые вызывается. Да и зачем объявлять функции returnFnResult()
параметр fn.
Он же здесь попросту не нужен. Как говорил один человек:
Скажу помягче: за такой код, который пишет Попов в своих видеоуроках, раньше либо четвертовали, либо сжигали на костре. И сейчас только мораторий на смертную казнь мешает сделать это.
// @ , также известный как оператор подавления ошибок -- сразу на мороз.
ini_set( 'upload_max_size' , '400M' ); // -- на мороз. Правильное написание: upload_max_filesize ; переопределяется только через .htaccess (в случае Apache, и если разрешены изменения в .htaccess) или через настройки сервера (PHP_INI_PERDIR), или в php.ini
ini_set( 'post_max_size', '400M'); // -- на мороз. Только через (см. выше.)
ini_set( 'max_execution_time', '300' ); // и это если хватит 300 секунд на обработку потока