在基于另一个列表的列表中通过 属性 删除第一个匹配对象
Remove first matching object by property in a list based on another list
假设我们有一个对象数组,例如:
[ { LeadId: AABB , Phone: 1234 , } ,
{ LeadId: ABCD , Phone: 5678 , } ,
{ LeadId: EERR , Phone: 1234 , } ,
{ LeadId: FFGG , Phone: 5678 , } ]
还有一个 phone 数字数组:
[ 1234 , 5678 , 6565 ]
我想删除第一个列表中每个 phone 数字的第一次出现,因此结果将是:
{ LeadId: EERR , Phone: 1234 , } ,
{ LeadId: FFGG , Phone: 5678 , }
假设 leadsToInsert
是我们需要从中删除事件的数组
phoneNumbers
是 phone 个数字
的数组
我试过下划线:
const leftOvers = _.without(
leadsToInsert,
_.find(leadsToInsert, {
Phone: phoneNumbers
})
);
当我运行这段代码时,leadsToInsert
中的所有对象都保留下来,没有任何过滤。
我什么时候出错了?
您可以获取一个对象并将散列 table 设置为 true
以进行下一次过滤。
var data = [{ LeadId: 'AABB', Phone: 1234 }, { LeadId: 'ABCD', Phone: 5678 }, { LeadId: 'EERR', Phone: 1234 }, { LeadId: 'FFGG', Phone: 5678 }],
omitFirst = [1234, 5678, 6565],
result = data.filter(
(seen => ({ Phone }) => !omitFirst.includes(Phone) || seen[Phone] || !(seen[Phone] = true))
({})
);
console.log(result);
将 phones 数组转换为 Set, and the use Array.filter()
, and delete the current phone from the Set. The Set.delete()
方法 returns true
如果项目已成功删除,否则 false
。所以对于第一个项目 !phones.delete()
是 false
(从数组中删除该项目),而具有相同 phone 的其他项目将被保留。
const data = [{ LeadId: 'AABB', Phone: 1234 }, { LeadId: 'ABCD', Phone: 5678 }, { LeadId: 'EERR', Phone: 1234 }, { LeadId: 'FFGG', Phone: 5678 }]
const phones = [1234, 5678, 6565]
const phonesSet = new Set(phones)
const result = data.filter(({ Phone }) => !phonesSet.delete(Phone))
console.log(result)
假设我们有一个对象数组,例如:
[ { LeadId: AABB , Phone: 1234 , } ,
{ LeadId: ABCD , Phone: 5678 , } ,
{ LeadId: EERR , Phone: 1234 , } ,
{ LeadId: FFGG , Phone: 5678 , } ]
还有一个 phone 数字数组:
[ 1234 , 5678 , 6565 ]
我想删除第一个列表中每个 phone 数字的第一次出现,因此结果将是:
{ LeadId: EERR , Phone: 1234 , } ,
{ LeadId: FFGG , Phone: 5678 , }
假设 leadsToInsert
是我们需要从中删除事件的数组
phoneNumbers
是 phone 个数字
我试过下划线:
const leftOvers = _.without(
leadsToInsert,
_.find(leadsToInsert, {
Phone: phoneNumbers
})
);
当我运行这段代码时,leadsToInsert
中的所有对象都保留下来,没有任何过滤。
我什么时候出错了?
您可以获取一个对象并将散列 table 设置为 true
以进行下一次过滤。
var data = [{ LeadId: 'AABB', Phone: 1234 }, { LeadId: 'ABCD', Phone: 5678 }, { LeadId: 'EERR', Phone: 1234 }, { LeadId: 'FFGG', Phone: 5678 }],
omitFirst = [1234, 5678, 6565],
result = data.filter(
(seen => ({ Phone }) => !omitFirst.includes(Phone) || seen[Phone] || !(seen[Phone] = true))
({})
);
console.log(result);
将 phones 数组转换为 Set, and the use Array.filter()
, and delete the current phone from the Set. The Set.delete()
方法 returns true
如果项目已成功删除,否则 false
。所以对于第一个项目 !phones.delete()
是 false
(从数组中删除该项目),而具有相同 phone 的其他项目将被保留。
const data = [{ LeadId: 'AABB', Phone: 1234 }, { LeadId: 'ABCD', Phone: 5678 }, { LeadId: 'EERR', Phone: 1234 }, { LeadId: 'FFGG', Phone: 5678 }]
const phones = [1234, 5678, 6565]
const phonesSet = new Set(phones)
const result = data.filter(({ Phone }) => !phonesSet.delete(Phone))
console.log(result)