Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Arrays_Typescript_Object_Angular6 - Fatal编程技术网

如何从JavaScript中的嵌套对象列表中删除对象?

如何从JavaScript中的嵌套对象列表中删除对象?,javascript,arrays,typescript,object,angular6,Javascript,Arrays,Typescript,Object,Angular6,我正在使用bootstrap treeview.js创建树结构。我已对此进行了修改,并为添加和删除新条目创建了2个BTN。 添加一个测试条目后,这是我的输出JSON,树就是从这里创建的 [ { "nodes":[ ], "tag_type":"parent", "name":"System Summary", "id":"XS1025", "desc":"KPI\"s for System Summary"

我正在使用bootstrap treeview.js创建树结构。我已对此进行了修改,并为添加和删除新条目创建了2个BTN。 添加一个测试条目后,这是我的输出JSON,树就是从这里创建的

[ 
   { 
      "nodes":[ 

      ],
      "tag_type":"parent",
      "name":"System Summary",
      "id":"XS1025",
      "desc":"KPI\"s for System Summary"
   },
   { 
      "nodes":[ 
         { 
            "nodes":[ 

            ],
            "tag_type":"child",
            "name":"Network",
            "id":"XS1026",
            "desc":"KPI\"s for Network"
         },
         { 
            "nodes":[ 

            ],
            "tag_type":"parent",
            "name":"test1",
            "id":"t1234",
            "desc":"davjwd we "
         }
      ],
      "tag_type":"parent",
      "name":"Monthly CMTS Summary",
      "id":"RS1001",
      "desc":"KPI\"s for Monthly CMTS Summary"
   }
]
现在,对于删除,我得到了用户要删除的选定ID。但无法将其从JSON中删除。 下面是我正在尝试的代码

deleteNodeFromKpiListData(nodeData: any, nodeId: any): void {
    //nodeData is a single object entry for recursively called function, and nodeId is the selected ID
    for (const [key, result] of Object.entries(nodeData)) {
        if (result['id'] === nodeId) {
            // Here I was trying to delete the objkect from actual JSON
            break;
        } else if (result['nodes'].length > 0) {
            this.deleteNodeFromKpiListData(result['nodes'], nodeId);
        }
    }
}
我尝试了.filter()和.splice()方法从数组中删除对象。但它没有正常工作。 示例:如果用户选择删除“test”,则nodeId=“t1234”和JSON将被删除

[ 
   { 
      "nodes":[ 

      ],
      "tag_type":"parent",
      "name":"System Summary",
      "id":"XS1025",
      "desc":"KPI\"s for System Summary"
   },
   { 
      "nodes":[ 
         { 
            "nodes":[ 

            ],
            "tag_type":"child",
            "name":"Network",
            "id":"XS1026",
            "desc":"KPI\"s for Network"
         }
      ],
      "tag_type":"parent",
      "name":"Monthly CMTS Summary",
      "id":"RS1001",
      "desc":"KPI\"s for Monthly CMTS Summary"
   }
]

这是一个带有typescript的角度项目。但是JavaScript代码也会有很大的帮助。

您可以使用一个循环,过滤内部节点,并推入一个新数组

让myObj=[
{
“节点”:[
],
“标记类型”:“父项”,
“名称”:“系统概要”,
“id”:“XS1025”,
“描述”:“系统汇总的KPI\”
},
{
“节点”:[
{
“节点”:[
],
“标记类型”:“子项”,
“名称”:“网络”,
“id”:“XS1026”,
“描述”:“网络的KPI\”
},
{
“节点”:[
],
“标记类型”:“父项”,
“名称”:“test1”,
“id”:“t1234”,
“描述”:“davjwd we”
}
],
“标记类型”:“父项”,
“名称”:“每月CMTS汇总表”,
“id”:“RS1001”,
“描述”:“月度CMTS汇总的KPI”
}
];
让myObjNew=[];
for(设i=0;i!item['id'].includes('t1234');
myinner.nodes=nodeOnly;
myObjNew.push(myinner);
}

console.log(myObjNew)
我已删除节点元素,但它未定义。请从列表中删除未定义的元素

var数据=[
{
“节点”:[
],
“标记类型”:“父项”,
“名称”:“系统概要”,
“id”:“XS1025”,
“描述”:“系统汇总的KPI\”
},
{
“节点”:[
{
“节点”:[
],
“标记类型”:“子项”,
“名称”:“网络”,
“id”:“XS1026”,
“描述”:“网络的KPI\”
},
{
“节点”:[
],
“标记类型”:“父项”,
“名称”:“test1”,
“id”:“t1234”,
“描述”:“davjwd we”
}
],
“标记类型”:“父项”,
“名称”:“每月CMTS汇总表”,
“id”:“RS1001”,
“描述”:“月度CMTS汇总的KPI”
}
];
函数removeElementById(数据数组、节点id){
对于(var a=0;a0){
removeElementById(数据数组[a][“节点”],节点id);
}
}
}
removeElementById(数据,“t1234”);

控制台日志(数据)我也试过了,但无法生成实际的结构。你能帮我写一些代码吗??