JavaScript数组自递归过滤:筛选父ID存在于数组中的元素
筛选数组中父ID存在于数组ID中的元素
问题分析
你需要保留数组中parent属性值存在于数组所有元素id集合中的项,原代码逻辑错误——你判断的是item.parent == item.id,这只会匹配父ID等于自身ID的元素(你的数组中没有这类元素,所以返回空数组)。
正确解法
- 先提取数组中所有
id存入Set,提升后续查找效率; - 遍历数组,筛选出
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
相关产品推荐
相关产品推荐

