首页 > 解决方案 > js从一维数组中删除相关项

问题描述

我有一组可能看起来像这样的对象:

{name: "A", parent: null},
{name: "B", parent: "A"},
{name: "C", parent: "B"},
{name: "D", parent: "B"},
{name: "E", parent: "A"},

这是在树层次结构中:

-A
    -B
        -C
        -D
    -E   

我试图从数组中删除名称为“B”的所有项目(这也应该删除它的孩子,所以在这种情况下项目“C”和“D”,但是我是递归新手,我无法制作我自己做这项工作,有人可以告诉我这样做的最佳方法吗?

感谢任何愿意提前提供帮助的人

标签: javascriptarraysloopsrecursionhierarchical-data

解决方案


var array_of_object = [
{name: "A", parent: null},
{name: "B", parent: "A"},
{name: "C", parent: "B"},
{name: "D", parent: "B"},
{name: "E", parent: "A"},
];


//returns array with updated value.
function deleteElementIncludingItsChildren(children, OriginalArray){
  return OriginalArray.filter(function(element){
    //console.log(element)
      if(element.name == children || element.parent == children) return false;
      else return element;
  });
}

console.log(deleteElementIncludingItsChildren("B", array_of_object))

更新: 用于删除特定节点及其所有子节点

var arr = [
{name: "A", parent: null},
{name: "B", parent: "A"},
{name: "C", parent: "B"},
{name: "D", parent: "B"},
{name: "E", parent: "A"},
];


function rm(node){
  var tmp = [];
  for(var i = 0; i<arr.length; i++){
    if(node == arr[i].parent)
      tmp.push(arr[i].name);
    if(node==arr[i].name){
      arr.splice(i, 1);
      i--;
    }
  }
  if(tmp.length !==0){
    tmp.forEach(function(elem){
        rm(elem);
    }); 
  }
}

rm("B")
console.log(arr)


推荐阅读