gpt4 book ai didi

javascript - 建设性地操纵未知深度的 JSON 树中的任何值/对象

转载 作者:行者123 更新时间:2023-11-29 15:05:16 25 4
gpt4 key购买 nike

我有一个包含节点和子节点的 JSON 树 - 格式为:

jsonObject = 
{
id:nodeid_1,
children: [
{
id:nodeid_2,
children:[]
},
{
id:nodeid_3,
children:[
{
id:nodeid_4,
children:[]
},
{
id:nodeid_5,
children:[]
}
}
}

我不知道这棵树的深度,一个节点可以有很多 child ,也有很多 child 等等。

我的问题是我需要使用 nodeID 将节点添加到这棵树中。例如,一个可以接受 nodeID 和节点对象(包括其子对象)的函数将能够替换树中的那个节点 - 结果会变成一棵更大的树。

我只遇到过允许我遍历 JSON 树中所有节点的递归函数,我对其中一个函数所做的修改返回节点对象 - 但对我没有帮助,因为我需要修改原始树:

var findNode = {
node:{},
find:function(nodeID,jsonObj) {
if( typeof jsonObj == "object" ) {
$.each(jsonObj, function(k,v) {
if(v == nodeID) {
findNode.node = $(jsonObj).eq(0).toArray()[0];
} else {
findNode.find(nodeID,v);
}
});
} else {
//console.log("jsobObj is not an object");
}
}
}

这让我可以进行以下测试:

findNode.find("nodeid_3",json);
alert(findNode.node);

总结一下 - 如何修改深度未知的 JSON 树的值?

提前致谢

最佳答案

如果你想修改一个节点,就像你说的,你可以只修改那个节点的属性。

var node = findNode.find("nodeid_3",json);
node.id = "nodeid_3_modified";
node.children = [];

另外,为什么要为此使用 jQuery?

这里有一个不使用 jQuery 的替代方案应该可行:

function findNode(object, nodeId) {
if (object.id === nodeId) return object;

var result;
for (var i = 0; i < object.children.length; i++) {
result = findNode(object.children[i], nodeId);
if (result !== undefined) return result;
}
}

关于javascript - 建设性地操纵未知深度的 JSON 树中的任何值/对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3702844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com