Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中将项推送到多维树状结构中_Javascript_Arrays_Json_Graph_Tree - Fatal编程技术网

在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);