【问题标题】:Save array after lodash removelodash 删除后保存数组
【发布时间】: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,则只剩下一项。我下面的方法仍然有效

标签: node.js lodash


【解决方案1】:

这对我有用。

            _.remove(user.items, userItem => userItem.id === sellingItem.id);
            const newArray = user.items;

            user.items = [];
            user.items = newArray;

            user.save();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-22
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 2018-06-13
    • 2021-06-28
    相关资源
    最近更新 更多