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])

... но вам придется иметь дело с очень большими массивами, чтобы накладные расходы были полезны.

Другие вопросы по тегам