如何使用箭头函数按列表过滤 属性

How do I use arrow functions filtering a property by a list

我有一个对象数组,我试图通过另一个数组中的 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'}];

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

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

类似

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

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

您可以使用 Array#filter with Array#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);

另一种选择是创建 Set from the ids array, and check if the set doesn't 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);

您可以用 Array#every 检查 id

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