首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过id删除子对象并使用筛选器检索父对象

如何通过id删除子对象并使用筛选器检索父对象
EN

Stack Overflow用户
提问于 2019-04-11 01:42:36
回答 2查看 251关注 0票数 0

我试图过滤父程序,只通过不匹配来删除它的子id。如果不存在子项,则应移除父级。

我试过这样做,但不管用。

代码语言:javascript
复制
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);

这里有什么问题,还是有人给我看了正确的方法?

寻找:

  1. 如果id与rm相同,则需要删除blog,父级与其他需要存在的子级相同。
  2. 需要删除父级,删除后的子级,以防没有子(博客)存在。

现场演示

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-11 01:58:19

循环遍历父母列表,在该循环中,首先尝试删除带有给定id的blog。完成此操作后,您可以检查blogs属性是否为空,如果为空,则将其过滤掉:

代码语言:javascript
复制
// 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;
})
票数 4
EN

Stack Overflow用户

发布于 2019-04-11 02:09:00

代码语言:javascript
复制
var result = objects.map(parent => {
parent.blog = parent.blog.filter(child => child.id !== rm);
return parent}).filter(parent => parent.blog && parent.blog.length > 0);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55623500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档