を使用して配列からアイテムを削除しています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()
、正しく機能するを使用しています。ただし、lodashremove
は機能しません。のドキュメントに.remove()
は、配列を直接変更すると記載されていますが、なぜここで機能しないのですか?
つまり、MongooseとLodashは互換性がないようです(少なくともこのユースケースでは)。
マングースArray.splice
は独自の方法でラップします。
マングースソースの568行目を参照してください
ただし、Lodashは明示的にデフォルトを呼び出しますArray.splice
。これにより、ラップされたバージョンが回避されます。
Lodashソースの7847、7864、3857、3866、1484、1435行を(順番に)参照してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加