ES6 напротив включает в себя логику
Чтобы удалить объекты из массива, я могу найти объекты, которые хочу удалить, используя следующий фрагмент кода:
this.data = this.data.filter(item => this.multipleSelectedIds.includes(item.id))
но чем то, что происходит, я назначаю this.data
массив всех объектов, которые я на самом деле хочу удалить из него. Какой будет логика наилучшей практики ES6 для реализации своего рода "исключения", так что я получаю все объекты, идентификаторы которых отсутствуют в this.multipleSelectedIds
вместо того, что у меня сейчас, что с точностью до наоборот?
1 ответ
Просто использовать !
оператор НЕ:
this.data = this.data.filter(item => !this.multipleSelectedIds.includes(item.id))
// ----------------------------------^
Поскольку вышеизложенное делает несколько проходов через multipleSelectedIds
(по одному на каждую запись в this.data
), если это очень большие массивы, возможно, стоит Set
или объект id
значения, которые он содержит, а затем вместо этого используют набор / объект, например:
Используя Set
:
const ids = new Set();
this.multipleSelectedIds.forEach(id => {
ids.add(id);
});
this.data = this.data.filter(item => !ids.has(id))
Используя объект:
const ids = Object.create(null);
this.multipleSelectedIds.forEach(id => {
ids[id] = true;
});
this.data = this.data.filter(item => !ids[id])
... но вам придется иметь дело с очень большими массивами, чтобы накладные расходы были полезны.