如何在递归的嵌套对象中查找,插入和删除属性

时间:2014-11-20 12:29:59

标签: javascript json recursion underscore.js nest-nested-object

我有一个JavaScript对象,如下所示:

var obj = {

  "id": 1098
  "someData": {},
  "children": [
    {
      "id": 2124
      "someData": {},
      "children": [...]
    },
    {
      "id": 1298,
      "someData": {},
      "children": [
        {
          "id": 1290,
          "someData": {},
          "children": [...]
        }
      ]
  ]

}

正如您所看到的,父对象始终是具有id的对象,一些数据和子对象具有与父对象相同的结构。理论上它可以无限嵌套。

我现在需要两个操作:添加删除在此结构中的某处。

  • "将对象添加为父级的子级,ID为1298"

  • "删除ID为2124"

  • 的对象

也许甚至有一个框架可以处理递归数据?

1 个答案:

答案 0 :(得分:0)

您必须使用递归方法找到所需的对象。获取并推送新数据或删除对象。

function findObjectById(root, id, action) {
    if (root.children) {
        for (var k in root.children) {
            if (root.children[k].id == id) {
                if(action=="fetch")
                  return root.children[k]; 
                else 
                   delete root.children[k];
            }
            else if (root.children[k].children.length) {
                return findObjectById(root.children[k], id);
            }
        }
    }
};

像这样推送新数据。

var parent = findObjectById(obj, 1298, "fetch");
parent.children.push({
        someData: {},
        id: 1234,
        children: []
});

删除这样的对象。

findObjectById(obj, 2124, "delete");