Node.js基于Mongoose实现从对象数组中删除指定匹配对象的方法
从对象数组中删除匹配指定对象的实现方法
你提供的lists是包含MongoDB文档结构的对象数组,obj为待删除的匹配目标,推荐按以下方式实现:
方案1:按唯一标识_id匹配删除(最高效可靠,推荐)
由于数组元素的_id是MongoDB的ObjectId引用类型,不能直接用===做等值判断,可以调用其内置的equals方法比对,也可以转成字符串后做等值比对:
- 不修改原数组,生成新过滤数组
// 用equals方法比对 const newLists = lists.filter(item => !item._id.equals(obj._id)) // 转字符串比对的等价写法 // const newLists = lists.filter(item => item._id.toString() !== obj._id.toString())
- 直接修改原数组,原地删除匹配项
const matchIndex = lists.findIndex(item => item._id.equals(obj._id)) if (matchIndex > -1) { lists.splice(matchIndex, 1) }
方案2:全字段内容匹配删除
如果业务场景要求所有字段内容完全一致才判定为匹配,建议使用成熟工具库的深度比对方法,避免自行实现遗漏边界情况:
// 引入lodash的深度比对方法 import { isEqual } from 'lodash' const newLists = lists.filter(item => !isEqual(item, obj))
注意:不要直接用
item === obj做比对,这种方式比对的是对象的内存地址而非内容,即使两个对象所有字段值完全一致也会判定为不相等。
内容的提问来源于stack exchange,提问作者Artiom O
相关产品推荐
相关产品推荐

