ES6相反包括逻辑

yar*_*bar -3 javascript ecmascript-2016

为了从数组中删除对象,我可以使用以下代码找到我想要删除的对象:

this.data = this.data.filter(item => this.multipleSelectedIds.includes(item.id))
Run Code Online (Sandbox Code Playgroud)

但实际情况是我为this.data数组分配了我想要从中删除的所有对象.什么是ES6最佳实践逻辑来实现"排除"的类型,所以我得到的是所有id不存在的对象this.multipleSelectedIds而不是我现在拥有的正好相反的对象?

T.J*_*der 9

简单地使用!NOT运算符:

this.data = this.data.filter(item => !this.multipleSelectedIds.includes(item.id))
// ----------------------------------^
Run Code Online (Sandbox Code Playgroud)

由于上面进行了多次传递multipleSelectedIds(每个条目一次this.data),如果这些是非常大的数组,可能值得创建它包含Setid值的一个或对象,然后使用set/object,例如:

使用Set:

const ids = new Set();
this.multipleSelectedIds.forEach(id => {
    ids.add(id);
});
this.data = this.data.filter(item => !ids.has(item.id))
Run Code Online (Sandbox Code Playgroud)

使用对象:

const ids = Object.create(null);
this.multipleSelectedIds.forEach(id => {
    ids[id] = true;
});
this.data = this.data.filter(item => !ids[item.id])
Run Code Online (Sandbox Code Playgroud)

...但是你必须处理非常大的数组才能获得开销.