JS根据指定ID数组删除对象内各数组的匹配元素实现方法
实现方法
核心处理逻辑分3步:
- 先把待删除的ID数组转为
Set结构,把ID查询的时间复杂度从O(n)降到O(1),数据量较大时性能优势明显 - 遍历
clientData的所有分组键,对每个分组下的条目数组做过滤 - 过滤规则为仅保留ID不在待删除集合中的条目,直接更新对应分组的数组即可,不需要改动原对象的顶层键结构
完整可运行代码示例:
// 原始clientData数据 const clientData = { 1111: [ {ID: 112, name: 'John', age: 23}, {ID: 113, name: 'Doe', age: 21}, {ID: 114, name: 'Stan', age: 24}, ], 2222: [ {ID: 222, name: 'Sara', age: 15}, {ID: 223, name: 'Wiliams', age: 61}, {ID: 224, name: 'Alan', age: 45}, ] } // 待删除的ID列表 const needDeleteIds = [112, 223, 114] const deleteIdSet = new Set(needDeleteIds) // 遍历所有分组执行过滤 Object.keys(clientData).forEach(groupKey => { clientData[groupKey] = clientData[groupKey].filter(item => !deleteIdSet.has(item.ID)) })
执行后输出的clientData结构和预期完全一致:
{ 1111: [ {ID: 113, name: 'Doe', age: 21} ], 2222: [ {ID: 222, name: 'Sara', age: 15}, {ID: 224, name: 'Alan', age: 45} ] }
补充说明:上述代码会直接修改原始clientData对象,如果需要保留原数据不被改动,可以先对原对象做深拷贝,在拷贝出的新对象上执行过滤逻辑即可。
内容的提问来源于stack exchange,提问作者Duchere
相关产品推荐
相关产品推荐

