【问题标题】:How do I use arrow functions filtering a property by a list如何使用箭头函数按列表过滤属性
【发布时间】:2017-12-06 20:13:33
【问题描述】:

我有一个对象数组,我试图通过另一个数组中的 id 列表删除几个元素。

说我有

transactions = [{id:12, name:'trs1'}, {id:18, name:'trs18'}, {id:45, name:'trs145'}, {id:98, name:'trs19'}];

ids = [12, 98];

那我想结束

transactions = [{id:18, name:'trs18'}, {id:45, name:'trs145'}];

我正在尝试从 transactions 数组中删除具有在 ids 数组中指定的 id 的元素。

我正在考虑创建一个子数组进行过滤,并用这个不包含 ids 数组中包含的元素的新子数组替换原始数组。

类似

var subArray = transactions.filter(trans => trans.id != ids)
transactions = subArray;

但我是箭头函数的新手,我不知道如何实现这一点。在文档中,我只看到他们使用 == 作为比较运算符。但我正在寻找与元素列表进行比较的东西。

【问题讨论】:

  • 请添加想要的结果。

标签: javascript arrays filter arrow-functions


【解决方案1】:

您可以使用Array#filterArray#includes 来检查ids 数组是否不包含id

const transactions = [{id:12, name:'trs1'}, {id:18, name:'trs18'}, {id:45, name:'trs145'}, {id:98, name:'trs19'}];

const ids = [12, 98];

const result = transactions.filter(({ id }) => !ids.includes(id));

console.log(result);

另一种选择是从ids 数组创建一个Set,并检查该集合是否不是have id

const transactions = [{id:12, name:'trs1'}, {id:18, name:'trs18'}, {id:45, name:'trs145'}, {id:98, name:'trs19'}];

const ids = [12, 98];
const idsSet = new Set([12, 98]);

const result = transactions.filter(({ id }) => !idsSet.has(id));

console.log(result);

【讨论】:

  • 我喜欢这个解决方案,如果我想要我想要删除的元素列表,它可以工作......但是,我最终想要不在 ids 数组中的元素列表。有排除或类似的吗?包含相反的东西。我在文档中找不到。
  • @jpavelw - 您可以使用!(非)运算符来否定包含,并使用 Set#has。查看更新的示例。
【解决方案2】:

您可以检查idArray#every

var transactions = [{ id: 12, name: 'trs1' }, { id: 18, name: 'trs18' }, { id: 45, name: 'trs145' }, { id: 98, name: 'trs19' }],
    ids = [12, 98],
    subArray = transactions.filter(trans => ids.every(id => trans.id !== id));

console.log(subArray);

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    相关资源
    最近更新 更多