首页 > 解决方案 > 如何通过 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);

这里有什么问题,或者有人告诉我正确的方法?

寻找 :

  1. 如果 id 与 rm 相同,则需要删除博客,需要存在的父级和其他子级。

  2. 需要删除父级,删除子级后,以防没有子级(博客)存在。

现场演示

标签: javascript

解决方案


遍历父母列表,并在该循环中,首先尝试删除具有给定 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;
})

推荐阅读