javascript - 将项目插入JavaScript中的多维树状结构

标签 javascript arrays json graph tree

我有一个类似这样的对象数组

var obj = [{
    id: 23,
    name: 'Test1',
    children: [{
         id: 24,
         name: 'Test2,
         children: [..]
    },{
         id: 25,
         name: 'Test2,
         children: [..]
    }],
},{..}]

每个 child 都可以有多个子 child ,所以基本上我试图表示一个类似结构的图,类似于 htmlparser 的输出.

我需要这样的功能:

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]);
        }
    }
}

似乎 json 被插入到递归函数本地的 obj,而不是实际的根 obj。我怎样才能将它插入父对象?

最佳答案

首先,查看您的对象结构,看起来您的根对象的结构是错误的。根对象不能是您想要的对象的数组。要利用递归,您应该具有在所有级别上都相似的结构。

您的函数实现几乎是正确的。

我只是希望您没有将 JSON 字符串作为 json 参数传递;如果是,则必须使用 JSON.parse(json)

解析它并创建一个 JS 对象

这里是更新的实现:

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

工作 JSFiddle:http://jsfiddle.net/ef3ewoag/2/

关于javascript - 将项目插入JavaScript中的多维树状结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28695348/

相关文章:

javascript - window.location.href 在当前页面内插入新页面

javascript - RxJs:通过distinctUntilChanged() 过滤顺序获取哪些对象键已更改,而不保留外部状态

javascript - ASP.NET MVC 使用参数过滤 SQL 查询

java - 检查数组中的负数并重新提示输入正确

javascript - JavaScript 列表操作是同步的吗?

javascript - 让 Jasmine 在服务器端运行

python - 基于列表在python numpy中排列数据的最快方法

ajax - ChartJS 的条形图不渲染

javascript - WCF JSON Web服务删除方括号

javascript - 使用 Google Charts 传递数据