javascript - 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”,但是我是递归新手,我无法制作我自己做这项工作,有人可以告诉我这样做的最佳方法吗?
感谢任何愿意提前提供帮助的人
解决方案
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)
推荐阅读
- ldap - 关于 LDAP 的一些问题
- python - pip install error - ModuleNotFoundError 包已经安装(要求已经满足)
- c++ - 从标记加载页面时如何使用导航框架?
- facebook - Facebook Places Search API (Graph API) 不工作
- amazon-web-services - S3 文件验证
- reactjs - Aux Component vs React Fragment 哪个更好?
- javascript - 如何在没有动画的情况下滚动时将标签栏固定到手机屏幕的底部
- python - 如何使用 Altair 按日期时间值突出显示条形
- html - 尝试编织 Rmarkdown 但出现 pandoc.utils 错误或 pandoc 错误 83
- android - ANDROID - RETROFIT:当我收到请求超时时如何处理?