javascript - 如何通过 id 删除子对象并使用过滤器检索父对象
问题描述
我正在尝试过滤父级,仅通过不匹配来删除它的子级 ID。如果没有孩子存在,则应删除父母。
我尝试这样,但不起作用。
var rm = 7;
var objects = [
{
name: "parent1",
id: 1,
blog: [
{
name: "child1",
id: 1
},
{
name: "child2",
id: 2
}
]
},
{
name: "parent2",
id: 2,
blog: [
{
name: "child3",
id: 3
},
{
name: "child4",
id: 4
}
]
},
{
name: "parent3",
id: 3,
blog: [
{
name: "child5",
id: 5
},
{
name: "child6",
id: 6
}
]
},
{
name: "parent4",
id: 3,
blog: [
{
name: "child6",
id: 7
}
]
},
]
var result = objects.filter(value => {
if(!value.blog) return;
return value.blog.some(blog => blog.id !== rm)
})
console.log(result);
这里有什么问题,或者有人告诉我正确的方法?
寻找 :
如果 id 与 rm 相同,则需要删除博客,需要存在的父级和其他子级。
需要删除父级,删除子级后,以防没有子级(博客)存在。
解决方案
遍历父母列表,并在该循环中,首先尝试删除具有给定 ID 的博客。完成后,您可以检查 blogs 属性是否为空,如果是,则将其过滤掉:
// We're going to filter out objects with no blogs
var result = objects.filter(value => {
// First filter blogs that match the given id
value.blog = value.blog.filter(blog => blog.id !== rm);
// Then, if the new length is different than 0, keep the parent
return value.blog.length;
})
推荐阅读
- json - com.google.gson.internal.LinkedTreeMap 类无法转换为 Partner 类
- json - 有什么方法可以查找 firebase 数据库的列表中是否存在某些内容?
- hadoop - 使用 Redshift Spectrum 映射通用 JSON 字段
- android - Kotlin 可运行的 Android
- flutter - 有问题,还是访问和更改列表中的值不好?
- javascript - Google Chart Table - 如果单元格为空,如何跳过超链接格式
- javascript - 创建具有可选属性的 JS 对象,具体取决于它们的定义
- jquery - 当旁边的另一个 div 展开时,如何防止 div 移动
- react-native - 卡片未将 imageProps 传递给图像组件
- python-3.x - 我有一个列表类型的数据框列,但列中的某些行缺少数据,所以我想从列中删除缺少的数据行