ES6相反包括逻辑

时间:2018-03-04 15:03:47

标签: javascript ecmascript-2016

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

this.data = this.data.filter(item => this.multipleSelectedIds.includes(item.id))

但是发生的事情是我为this.data数组分配了我想要从中删除的所有对象。 什么是ES6最佳实践逻辑来实现“排除”的类型,所以我得到的是所有id都不在this.multipleSelectedIds而不是我现在所拥有的对象完全相反?

1 个答案:

答案 0 :(得分:8)

只需使用!,NOT运算符:

this.data = this.data.filter(item => !this.multipleSelectedIds.includes(item.id))
// ----------------------------------^

由于以上内容多次通过multipleSelectedIdsthis.data中的每个条目都有一次),如果这些是 非常 大型数组,那么可能值得制作Set或其包含的id值的对象,然后使用set / object,例如:

使用Set

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

使用对象:

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

...但是您必须处理非常大的数组才能使开销值得。