我有一个包含节点和子节点的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树中所有节点的递归函数,而我对这些函数之一所做的修改使我返回了node对象-但是对我没有帮助,因为我需要修改原始树:
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 - build 性地操纵深度未知的JSON树中的任何值/对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3702844/

10-11 18:18