Array.splice работает, Lodash.remove нет - PullRequest
0 голосов
/ 10 сентября 2018

Я удаляю элемент из массива с 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() говорит о том, что он мутирует массив напрямую, так почему он здесь не работает?

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Короче говоря, Mongoose и Lodash не совместимы (по крайней мере, для этого варианта использования).


Обертывания Mongoose Array.splice собственным методом.

Пожалуйстасм. строку 568 из источника Mongoose

Однако Lodash явно вызывает значение по умолчанию Array.splice, которое обходит завернутую версию.

См. (по порядку) строки 7847,7864, 3857, 3866, 1484, 1435 Источник Лодаша

0 голосов
/ 10 сентября 2018

Согласно документации remove «Возвращает новый массив удаленных элементов».Таким образом, чтобы достичь желаемого, вам необходимо присвоить возвращаемое значение вызова для user.items.

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

...