You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript数组自递归过滤:筛选父ID存在于数组中的元素

筛选数组中父ID存在于数组ID中的元素

问题分析

你需要保留数组中parent属性值存在于数组所有元素id集合中的项,原代码逻辑错误——你判断的是item.parent == item.id,这只会匹配父ID等于自身ID的元素(你的数组中没有这类元素,所以返回空数组)。

正确解法

  1. 先提取数组中所有id存入Set,提升后续查找效率;
  2. 遍历数组,筛选出parent不为null且存在于id集合中的元素。

代码实现(TypeScript)

interface IItem {
  id: number;
  parent: number | null;
  value1: number;
  value2: number;
}

// 收集数组中所有存在的ID
const existingIds = new Set(array.map(item => item.id));

// 执行筛选
const filteredArray = array.filter((item: IItem) => {
  return item.parent !== null && existingIds.has(item.parent);
});

期望输出

[
    {
      "id": 2,
      "parent": 1,
      "value1": 0,
      "value2": 0
    },
    {
      "id": 3,
      "parent": 1,
      "value1": 40,
      "value2": 70
    },
    {
      "id": 4,
      "parent": 2,
      "value1": 40,
      "value2": 70
    }
]

说明

使用Set存储ID是因为它的has方法查找效率为O(1),相比每次遍历数组查找(O(n)),在数组规模较大时性能更优。

内容的提问来源于stack exchange,提问作者C Sharper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 13:25:17