Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Построить дерево (https://javascript.ru/forum/dom-window/80995-postroit-derevo.html)

PetrIII 09.09.2020 15:27

Построить дерево
 
Добрый день
Есть такая структура:
010.000.000.000.000.000 - 1 уровень
010.010.000.000.000.000 - 2 уровень
010.010.000.000.000.010 - элемент 2 уровня
010.010.010.000.000.000 - 3 уровень
010.010.010.010.000.000 - 4 уровень (первый элемент)
010.010.010.010.000.010 - элемент 4 уровня
010.010.010.010.000.020 - элемент 4 уровня
010.010.010.020.000.000 - 4 уровень (второй элемент)
010.010.010.020.000.010 - элемент 4 уровня
010.010.010.020.000.020 - элемент 4 уровня

нужно из этой структуры получить дерево в виде json

Vlasenko Fedor 09.09.2020 17:30

const tree = (obj, path) => {
    let keys = path.split('.'),
        key;
    while (key = keys.shift()) {
        typeof obj[key] === 'undefined' && (obj[key] = {});
        obj = obj[key];
    }
    return obj;
};

let data = {};
tree(data, '010.000.000.000.000.000');
tree(data, '010.010.000.000.000.000');
tree(data, '010.010.000.000.000.010');
tree(data, '010.010.010.000.000.000');
tree(data, '010.010.010.010.000.000');
tree(data, '010.010.010.010.000.010');
tree(data, '010.010.010.010.000.020');
tree(data, '010.010.010.020.000.000');
tree(data, '010.010.010.020.000.010');
tree(data, '010.010.010.020.000.020');

console.dir(data);

Вариант :dance:

PetrIII 09.09.2020 17:57

я тоже накатал вариант, в принципе он меня устроил

var m = arr.map(function (itm) {
var sp = itm.level.split('.');
for (var i = sp.length; i >= 0; i--) {
if (parseInt(sp[i]) > 0) {
sp[i] = '000';
break;
}
}
itm.parent = sp.join('.');
return itm;
});

спасибо


Часовой пояс GMT +3, время: 07:04.