Javascript 删除JS嵌套对象数组中任意级别的项
给定如下对象数组:Javascript 删除JS嵌套对象数组中任意级别的项,javascript,Javascript,给定如下对象数组: var items = [{ id: 1 }, { id: 2, child: { id: 3 } }, { id: 4, child: { id: 5, child: { id: 6 } } }]; 我需要一个方法来删除任何级别的项目。这个代码符合我的要求,但是有更好的方法吗 起初,我尝试用一个递归函数来实现它,但无法实现 var removed = removeItems(items, 5); p
var items = [{
id: 1
}, {
id: 2,
child: {
id: 3
}
}, {
id: 4,
child: {
id: 5,
child: {
id: 6
}
}
}];
我需要一个方法来删除任何级别的项目。这个代码符合我的要求,但是有更好的方法吗
起初,我尝试用一个递归函数来实现它,但无法实现
var removed = removeItems(items, 5);
print(removed);
function removeItems(items, id) {
items.forEach(function(item, index, allItems) {
if (item.id === id) {
items.splice(index, 1);
}
if (item.child) {
item = testChild(item, item.child, id);
}
});
return items;
}
function testChild(parent, child, id) {
if (child.id === id) {
delete parent.child
return parent;
} else {
if (child.child) {
return testChild(child, child.child, id);
}
return parent;
}
}
function print(obj) {
document.querySelector('#out').innerHTML += JSON.stringify(obj, null, 2);
}
jsidle:这里是一个通用的删除函数,它可以根据您的需要工作
var项目=[{
身份证号码:1
}, {
id:2,
子项:{id:3}
}, {
id:4,
孩子:{
id:5,
孩子:{
身份证号码:6
}
}
}
];
函数删除(src,谓词){
//用于阵列
if(Array.isArray(src)){
对于(var i=src.length-1;i>-1;i--){
if(谓词(src[i])){
型钢混凝土接头(i,1);
}否则{
remove(src[i],谓词);
}
}
}
//为对象
否则{
用于(src中的var i){
if(谓词(src[i])){
删除src[i];
}否则{
remove(src[i],谓词);
}
}
}
}
//删除id==1
删除(项目、功能(元素){
返回element.id&&element.id==1;
});
log(JSON.stringify(items));
//删除id==6
删除(项目、功能(元素){
返回element.id&&element.id==6;
});
log(JSON.stringify(items))代码>谢谢你EyuelDK