我正在使用mongoose
从数组中删除一项。一些代码:
const { find, remove } = require('lodash');
....
UserSchema.methods.deleteItem = async function (id) {
const user = this;
const item = find(user.items, i => i.id === id);
const idx = user.items.indexOf(item);
user.items.splice(idx, 1);
// remove(user.items, i => i.id === id);
try {
await user.save();
return item;
} catch (err) {
throw new Error(err);
}
};
在上面的代码中,我使用splice()
,它可以正常工作。但是,lodash的remove
不起作用。 .remove()
的{{3}}说它直接使数组变异,那么为什么它在这里不起作用?
答案 0 :(得分:2)
简而言之,Mongoose和Lodash似乎不兼容(至少在此用例中如此)。
猫鼬用自己的方法包装> cat /tmp/file
lots of spaces
line 2
> echo `cat /tmp/file`
lots of spaces line 2
>
。
请参阅Mongoose source的568行
但是,Lodash明确调用了默认的Array.splice
,它绕开了包装版本。
请(依次)查看Lodash source的第7847、7864、3857、3866、1484、1435行
答案 1 :(得分:-3)
根据文档remove
“返回删除的元素的新数组”。因此,为了实现所需的功能,需要将发票的返回值分配给user.items。