【发布时间】:2019-08-10 21:46:55
【问题描述】:
所以我有这个代码:
_.remove(user.items, userItem => userItem.id === sellingItem.id);
user.save();
它目前所做的是从数组中删除一项,但问题是当我保存用户时,数组中仍然有相同的删除项。当我执行splice 并保存用户时,该项目也会从数据库中删除。为什么这不适用于remove?
编辑
_.remove(user.items, userItem => userItem.id === sellingItem.id);
const newArray = user.items; // array without the item
user.items = newArray;
user.save();
在数据库中仍然是旧数组。
【问题讨论】:
-
remove将返回一个带有您指定的修改的新数组。所有的 Lodash 方法都是这样工作的——它们将接受一个数组和一些回调,并返回一个对应于在原始回调上应用回调的数组。 -
是的,它返回没有项目的新数组,即使我保存了用户,该数组仍然像以前一样在数据库中包含所有项目。
-
您永远不会更改原始数组。
user.items与调用_.remove之前完全相同。 -
// array without the item这不是没有该项的数组。事实上,它只不过是对完全相同的数组的引用——newArray字面意思与以前的数组相同,甚至不是具有相同内容的副本。_.remove不会修改它处理的数组,它会构造一个全新的数组并将它返回作为调用的结果。所以,如果你想使用它,你需要捕获返回结果const newArray = _.remove(/* ... */) -
好的
newArray = _.remove(/* ... */)也是问题所在,因为它返回的不是所有数组,而是 REMOVED ITEM。因此,如果我将newArray设置为user.items,则只剩下一项。我下面的方法仍然有效