Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在递归嵌套对象中查找、插入和删除属性_Javascript_Json_Recursion_Underscore.js_Nest Nested Object - Fatal编程技术网

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

Javascript 如何在递归嵌套对象中查找、插入和删除属性,javascript,json,recursion,underscore.js,nest-nested-object,Javascript,Json,Recursion,Underscore.js,Nest Nested Object,我有一个JavaScript对象,如下所示: var obj = { "id": 1098 "someData": {}, "children": [ { "id": 2124 "someData": {}, "children": [...] }, { "id": 1298, "someData": {}, "children": [ { "id":

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

var obj = {

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

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

我现在需要两个操作:添加删除

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

  • “删除id为2124的对象”


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

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

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");
删除这样的对象

var parent = findObjectById(obj, 1298, "fetch");
parent.children.push({
        someData: {},
        id: 1234,
        children: []
});
findObjectById(obj, 2124, "delete");
您可以使用
for(在您的结构中键入)
循环,并在childrens上设置条件!