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