Array.splice有效,Lodash.remove不起作用

时间:2018-09-10 19:54:57

标签: javascript mongoose lodash

我正在使用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}}说它直接使数组变异,那么为什么它在这里不起作用?

2 个答案:

答案 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。

https://lodash.com/docs/4.17.10#remove