Stack Overflow на русском Asked on January 6, 2022
Есть объект
object = {
"knot": [
{
"ico": "Папка",
"name": "Архив",
"type": "Папка",
"adress": "0-1",
"сhild": []
},
{
"ico": "Папка",
"name": "Всякое",
"type": "Папка",
"adress": "0-2",
"сhild": []
}
]
}
С сервера мы получаем еще один объект
сhild1 = {
"ico": "rar",
"name": "Архив2",
"type": "Фаил",
"adress": "0-1-1",
"сhild": []
}
Убирая последнюю цифру и -,из adress у пришедшего объекта, мы получаем адрес родителя.Куда данный узел должен встать.В объекте object
Так мы можем получить неограниченное количества объектов с разными значениями adress
сhild2 = {
"ico": "rar",
"name": "Архив3",
"type": "Фаил",
"adress": "0-1-2",
"сhild": []
}
Если структура дерева заранее известна, то мы можем обращаться к ней
object.knot[0].сhild[0]=сhild1;
object.knot[0].сhild[1]=сhild2;
И тем самым вставлять узлы в нужные места.
Но если дерево постоянно может расширяться,то вставки тоже могут быть динамическими и иметь подобный вид.
object.knot[0].сhild[1].сhild[0].сhild[1].сhild[0].сhild[0].сhild[0].сhild[0]=сhild2;
Можно конечно написать функцию, которая будет строить такую ленту в строковом представлении, а потом через eval её выполнять,
Но наверное есть же, какое то более красивое решение дописывать, в объект значения,на глубокой вложенности.
Благодаря подсказки Grundy задача решилась.
var object1 = {
"knot": [{
"ico": "Папка",
"name": "Архив",
"type": "Папка",
"adress": "0-1",
"сhild": [{
"ico": "Папка",
"name": "Всякое",
"type": "Папка",
"adress": "0-1-1",
"сhild": []
},
{
"ico": "Папка",
"name": "Всякое",
"type": "Папка",
"adress": "0-1-2",
"сhild": []
}]
},
{
"ico": "Папка",
"name": "Всякое",
"type": "Папка",
"adress": "0-2",
"сhild": []
}
]
};
var сhild2 = {
"ico": "rar",
"name": "Архив3",
"type": "Фаил",
"adress": "0-1-2-1",
"сhild": []
}
var сhild1 = {
"ico": "rar",
"name": "Архив3",
"type": "Фаил",
"adress": "0-1-1-1",
"сhild": []
}
function add_node(mostly_tree, сhild) {
//разбиваем адрес "0-1-1-1" в массив [0][1][1][1]
let calculation = сhild.adress.split('-');
//убираем последнее значение из массива [0][1][1]
calculation.pop();
//собираем из массива [0][1][1] новый адрес "0-1-1"
let parent_adress = calculation.join('-');
//перебираем массив рекурсивно
mostly_tree.map((n) => {
//нашли нужный адресс в дереве вставляем сhild
if (n.adress == parent_adress) {
n.сhild.push(сhild);
}
//если есть сhild и вних что то есть продолжаем перебор
if (n.сhild && n.сhild.length) {
add_node(n.сhild, сhild)
}
}
)
}
add_node(object1.knot, сhild1)
add_node(object1.knot, сhild2)
console.log(object1);
Answered by Андрей Солуянов on January 6, 2022
если строка адреса точно совпадает со структурой, то
Например:
var object = {
"knot": [{
"ico": "Папка",
"name": "Архив",
"type": "Папка",
"adress": "0-1",
"сhild": []
},
{
"ico": "Папка",
"name": "Всякое",
"type": "Папка",
"adress": "0-2",
"сhild": []
}
]
};
var сhild2 = {
"ico": "rar",
"name": "Архив3",
"type": "Фаил",
"adress": "0-1-2",
"сhild": []
}
function findObj(root, path) {
return path.split('-').slice(1, -1).reduce((acc, cur) => acc[cur - 1], root);
}
var obj = findObj(object.knot, сhild2.adress);
console.log(obj)
obj.сhild.push(сhild2);
console.log(object);
Answered by Grundy on January 6, 2022
0 Asked on January 4, 2022 by konstantine
1 Asked on January 4, 2022 by hidden-gen
1 Asked on January 1, 2022
c qt windows %d0%ba%d0%be%d0%bd%d1%81%d0%be%d0%bb%d1%8c %d1%81%d0%b8%d0%bc%d0%b2%d0%be%d0%bb%d1%8b
1 Asked on January 1, 2022
2 Asked on January 1, 2022
css css3 html svg %d0%b0%d0%bd%d0%b8%d0%bc%d0%b0%d1%86%d0%b8%d1%8f
1 Asked on January 1, 2022
2 Asked on January 1, 2022
1 Asked on January 1, 2022 by bota
2 Asked on January 1, 2022 by masya
c %d0%b4%d0%b8%d0%bd%d0%b0%d0%bc%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%b8%d0%b5 %d0%bc%d0%b0%d1%81%d1%81%d0%b8%d0%b2%d1%8b %d0%bf%d0%b0%d0%bc%d1%8f%d1%82%d1%8c %d1%83%d0%ba%d0%b0%d0%b7%d0%b0%d1%82%d0%b5%d0%bb%d0%b8
1 Asked on January 1, 2022 by spasibo
2 Asked on January 1, 2022
keras python tensorflow %d0%bc%d0%b0%d1%88%d0%b8%d0%bd%d0%bd%d0%be%d0%b5 %d0%be%d0%b1%d1%83%d1%87%d0%b5%d0%bd%d0%b8%d0%b5 %d0%bd%d0%b5%d0%b9%d1%80%d0%be%d0%bd%d0%bd%d1%8b%d0%b5 %d1%81%d0%b5%d1%82%d0%b8
0 Asked on January 1, 2022
bot python python 3 6 %d0%b2%d0%ba%d0%be%d0%bd%d1%82%d0%b0%d0%ba%d1%82%d0%b5
Get help from others!
Recent Answers
Recent Questions
© 2023 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP