Нужно реализовать функцию, которая принимает на вход функцию-обработчик и дерево, а возвращает отображенное дерево.
Вот дерево:
const tree = {
name: '/',
type: 'directory',
meta: {},
children: [
{
name: 'ETC',
type: 'directory',
meta: {},
children: [
{
name: 'NGINX',
type: 'directory',
meta: {},
children: [],
},
{
name: 'CONSUL',
type: 'directory',
meta: {},
children: [{ name: 'CONFIG.JSON', type: 'file', meta: {} }],
},
],
},
{ name: 'HOSTS', type: 'file', meta: {} },
],
};
Мое решение(которое очевидно, не верное)
const map = (f, tree) => {
const newEl = f(tree);
const childrens = newEl.children
if(newEl.type === 'directory'){
return [newEl, childrens.map(el => map(f,el))]
}
return {newEl};
};
Вот вызов:
map(n => ({ ...n, name: n.name.toLowerCase() }), tree);
Чуть подправил. Вы получаете результат map
, но не присваиваете его элементам children
. Так же не надо возвращать массив, так как Вы хотите вернуть обратно дерево. После выполнения map
прототипа Array
, значения передадутся по ссылке, поэтому просто присвойте children
новые к старому массиву. Последний return
не нужно превращать в объект, так как Вы и так имеете объект на входе.
const tree = {
name: '/',
type: 'directory',
meta: {},
children: [
{
name: 'ETC',
type: 'directory',
meta: {},
children: [
{
name: 'NGINX',
type: 'directory',
meta: {},
children: [],
},
{
name: 'CONSUL',
type: 'directory',
meta: {},
children: [{ name: 'CONFIG.JSON', type: 'file', meta: {} }],
},
],
},
{ name: 'HOSTS', type: 'file', meta: {} },
],
};
const map = (f, tree) => {
const newEl = f(tree);
if(newEl.type === 'directory') newEl.children = newEl.children.map(el => el = map(f,el));
return newEl;
};
const result = map(n => {n.name = n.name.toLowerCase(); return n;}, tree);
console.log(result)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Возможно ли работать(читать) с com-port значения? То есть получать значение в реалтайме и выводить его в браузер с помощью JS
Скажите, пожалуйста, как реализовать скролл у меню на мобильной версии? Фото прикладываюЛогика такая: когда пункты меню перестают влезать,...