如何根据指定ID数组移除JSON对象数组中的匹配元素
实现方案
核心逻辑是遍历问题条目列表,剔除ID在待移除ID列表中的项,生产环境推荐优先用无副作用的过滤写法,避免直接修改原数组引发不可预期的问题。
推荐写法(不修改原数组,性能最优)
利用Array.filter生成新的符合要求的数组,提前将待删除ID数组转为Set结构,把ID查询的时间复杂度从O(n)降到O(1),数据量较大时性能提升明显:
// 构建待删除ID的集合 const targetDeleteIds = new Set(idArray); // 过滤保留不在删除集合内的条目 const remainIssues = issues.filter(issue => !targetDeleteIds.has(issue.id));
执行后remainIssues就是移除了目标ID条目的新数组,原始issues数组不会被改动,适合绝大多数前端业务场景。
原数组修改写法
如果业务要求必须直接修改原始issues数组(不推荐,容易产生隐式副作用),采用倒序遍历+splice的方式删除,避免正序删除时数组索引前移导致的漏删问题:
const targetDeleteIds = new Set(idArray); // 从数组末尾往前遍历 for (let i = issues.length - 1; i >= 0; i--) { if (targetDeleteIds.has(issues[i].id)) { issues.splice(i, 1); } }
执行后原issues数组内匹配ID的条目会被直接删除。
结果验证
两种写法执行完成后,剩余的条目ID为:
3d90afa1-bbbe-4640-bf91-38b27f72279aa926ce55-79a3-4d38-923b-59b92cb2164adc137785-c283-4e54-a8c9-176e80d07b97idArray中存储的两个ID对应的条目已被完全移除。
内容的提问来源于stack exchange,提问作者Vishnu Kumar
相关产品推荐
相关产品推荐

