【问题标题】:ES6 opposite of includes logicES6 相反的包含逻辑
【发布时间】:2018-03-04 15:03:47
【问题描述】:

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

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

但是发生的事情是我将我真正想要从中删除的所有对象分配给this.data 数组。 什么将是实现某种“排除”的 ES6 最佳实践逻辑,所以我得到的是所有 id 不在 this.multipleSelectedIds 中的对象,而不是我现在拥有的恰恰相反?

【问题讨论】:

  • 使用NOT运算符!
  • !this.multipleSelectedIds.includes...?
  • 并不是每一个很酷的 JS 特性都是 ES6。这是 ES2016。

标签: javascript ecmascript-2016


【解决方案1】:

只需使用!,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])

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

【讨论】:

  • 这一定是我给过的最快的投票:D
  • @AndrewK - 谢谢!固定的。随意直接在更正中进行编辑,这样很明显(如在本例中)它与作者的意图不冲突。 (特别是在社区 wiki 的回答中。)但是,如果您完全不确定,请发表评论。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多