1

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

var obj = {

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

}

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

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

  • 将此对象添加为 id 为 1298 的父对象的子对象”

  • “删除 id 为 2124 的对象”

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

4

1 回答 1

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");
于 2014-11-21T05:07:50.813 回答