我一直在想办法做到这一点。这是我的对象:
{
"id":1,
"name":"Blooper Corp.",
"emoji":"🐕",
"parent_id":null,
"children":[
{
"id":2,
"name":"Food",
"emoji":"🥩",
"parent_id":1,
"children":[
]
},
{
"id":3,
"name":"Canine Therapy",
"emoji":"😌",
"parent_id":1,
"children":[
{
"id":4,
"name":"Massages",
"emoji":"💆",
"parent_id":3,
"children":[
]
},
{
"id":5,
"name":"Games",
"emoji":"🎾",
"parent_id":3,
"children":[
]
}
]
}
]
}
我正在尝试获取最后一个 id
数组,这样我就可以在新的子数组中使用它,并将它作为子数组添加到该特定层,例如:
{
"id":6, // New id
"name":"Music",
"emoji":"",
"parent_id":4, //this will be the parent id it belongs to
"children":[
]
}
这是我的 javascript 按钮函数:
function askUserForTeamDetails( team ) {
const emoji = prompt( 'Enter new team’s emoji:' );
if ( null === emoji ) {
return;
}
const name = prompt( 'Enter new team’s name:' );
if ( null === name ) {
return;
}
let tree = getTree();
tree.id = {}; //new child array to push depending on parent id
return { name, emoji };
}
getTree()
:
const tree = {"id":1,"name":"Rusty Corp.","emoji":"🐕","parent_id":null,"children":[{"id":2,"name":"Food","emoji":"🥩","parent_id":1,"children":[]},{"id":3,"name":"Canine Therapy","emoji":"😌","parent_id":1,"children":[{"id":4,"name":"Massages","emoji":"💆","parent_id":3,"children":[]},{"id":5,"name":"Games","emoji":"🎾","parent_id":3,"children":[]}]}]};
return tree;
我试过使用 Object.keys(tree)[Object.keys(tree).length-1];
但我看不出这将如何运作,因为它是多维的。
我希望有人可以建议这样做的方法。
谢谢
最佳答案
如果你想添加基于 parent_id
属性的新对象,可以在任何级别上,你可以创建递归函数,用 for...in
遍历对象> 如果 id 匹配,循环并将对象推送给 child 。
const data = {"id":1,"name":"Blooper Corp.","emoji":"🐕","parent_id":null,"children":[{"id":2,"name":"Food","emoji":"🥩","parent_id":1,"children":[]},{"id":3,"name":"Canine Therapy","emoji":"😌","parent_id":1,"children":[{"id":4,"name":"Massages","emoji":"💆","parent_id":3,"children":[]},{"id":5,"name":"Games","emoji":"🎾","parent_id":3,"children":[]}]}]}
function insert(data, obj, pid = null) {
if (pid == obj.parent_id) {
data.children.push(obj);
return;
}
if (data.children) {
data.children.forEach(e => insert(e, obj, e.id))
}
}
function getLastId(data) {
let result = null;
function search(data) {
if (!result || data.id > result) result = data.id;
if (data.children) data.children.forEach(search);
}
search(data);
return result;
}
const newObj = {
"id": getLastId(data) + 1,
"name": "Music",
"emoji": "",
"parent_id": 4,
"children": []
}
insert(data, newObj);
console.log(data)
关于javascript - 通过 id 查找元素并追加到对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58547545/