在JavaScript中将项推送到多维树状结构中
我有一个对象数组,它是这样的在JavaScript中将项推送到多维树状结构中,javascript,arrays,json,graph,tree,Javascript,Arrays,Json,Graph,Tree,我有一个对象数组,它是这样的 var obj = [{ id: 23, name: 'Test1', children: [{ id: 24, name: 'Test2, children: [..] },{ id: 25, name: 'Test2, children: [..] }], },{..}] 每个子级可以有多个子级,所以基本上我试图表
var obj = [{
id: 23,
name: 'Test1',
children: [{
id: 24,
name: 'Test2,
children: [..]
},{
id: 25,
name: 'Test2,
children: [..]
}],
},{..}]
每个子级可以有多个子级,所以基本上我试图表示一个类似于图的结构,类似于的输出
我需要这样一个函数:
function(nodeId, json){}
函数需要使用nodeId在树中查找json对象,并将json作为父对象的子对象插入。这就是我被困的地方
我尝试编写这样的递归函数来搜索适当的节点,但是,当我必须将json插入实际的obj数组时,就会出现问题
function findNode(nodeId, json, obj){
if(obj.id == nodeId){
obj.children.push(json);
}
else{
for(var i=0; i<obj.children.length; i++){
findNode(nodeId, json, obj.children[i]);
}
}
}
函数findNode(nodeId、json、obj){
if(obj.id==nodeId){
obj.children.push(json);
}
否则{
对于(var i=0;i您必须返回对象
选中此项:
var obj=[{
id:23,
名称:“Test1”,
儿童:[{
id:24,
名称:“Test2”,
儿童:[]
},{
身份证号码:25,
名称:“Test2”,
儿童:[]
}],
}];
var findNode=函数(nodeId、json、o){
if(o.id==nodeId){
o、 children.push(json);
}
否则{
如果(o.儿童){
对于(var i=0;i首先,从对象的结构来看,根对象的结构似乎是错误的。根对象不能是您想要的对象数组。要利用递归,您应该具有在所有级别上都相似的结构
您的函数实现几乎是正确的
我只是希望您不要将JSON字符串作为JSON
参数传递;如果是,您必须解析它并使用JSON.parse(JSON)
以下是更新的实施:
var obj = {
id: 23,
name: 'Test1',
children: [{
id: 24,
name: 'Test2',
children: []
},{
id: 25,
name: 'Test2',
children: []
}],
};
var objToBePushed = {
id: 26,
name: 'Test3',
children: [{
id: 27,
name: 'Test4',
children: []
}]
};
function findNode(nodeId, json, node){
if(node.id == nodeId){
node.children.push(json);
}
else{
for(var i=0; i<node.children.length; i++){
findNode(nodeId, json, node.children[i]);
}
}
}
findNode(24, objToBePushed, obj);
console.log(obj);
var obj={
id:23,
名称:“Test1”,
儿童:[{
id:24,
名称:“Test2”,
儿童:[]
},{
身份证号码:25,
名称:“Test2”,
儿童:[]
}],
};
var objtobepush={
身份证号码:26,
名称:“Test3”,
儿童:[{
id:27,
名称:“Test4”,
儿童:[]
}]
};
函数findNode(nodeId、json、node){
if(node.id==nodeId){
node.children.push(json);
}
否则{
对于(var i=0;我真的不明白要在哪里插入json,如果您找到具有正确id的子项,它位于obj.children[i]下父对象可以像obj一样访问,或者您正在有效地查找obj.parent?我正在查找父对象。如果nodeId与父对象的id匹配,我将插入json对象作为该父对象的子对象。这可能会有所帮助。好吧,换句话,假设您有一个简单的树,如a->B->C->D,nodeId与节点C匹配,您希望在哪个节点中使用t来放置json?它将是C的子代,即D的兄弟
var obj = {
id: 23,
name: 'Test1',
children: [{
id: 24,
name: 'Test2',
children: []
},{
id: 25,
name: 'Test2',
children: []
}],
};
var objToBePushed = {
id: 26,
name: 'Test3',
children: [{
id: 27,
name: 'Test4',
children: []
}]
};
function findNode(nodeId, json, node){
if(node.id == nodeId){
node.children.push(json);
}
else{
for(var i=0; i<node.children.length; i++){
findNode(nodeId, json, node.children[i]);
}
}
}
findNode(24, objToBePushed, obj);
console.log(obj);