【发布时间】:2021-01-13 00:38:21
【问题描述】:
如何从有条件的集合中删除一个项目
if(item.id === 2){
mySet.delete(item)
}
我不能使用mySet.has(item),因为对象中唯一常见的就是id。
【问题讨论】:
标签: javascript set
如何从有条件的集合中删除一个项目
if(item.id === 2){
mySet.delete(item)
}
我不能使用mySet.has(item),因为对象中唯一常见的就是id。
【问题讨论】:
标签: javascript set
除非您已经拥有对该对象的引用,否则您必须将 Set 的值迭代到匹配的对象 .find,然后使用它调用 .delete:
const set = new Set([
{ id: 1 },
{ id: 2 },
]);
const obj = [...set].find(obj => obj.id === 2);
set.delete(obj);
console.log([...set]);
【讨论】:
您可以创建剩余项目的数组,例如
var resultArr = [];
yourobj.forEach((item,index)=>{
if(item.id === 2)
{
// nothing
}
else
{
resultArr.push(item);
}
})
【讨论】:
您可以使用for ... of 语句根据您的条件从集合中查找和删除匹配项。如果您担心,it's ok 在迭代时从集合中删除一个项目。
let mySet = new Set([
{ id: 1 },
{ id: 2 },
{ id: 3 }
]);
for (const item of mySet) if (item.id == 2) { mySet.delete(item); /*optional*/ break; }
console.log([...mySet]);
如果有多个匹配项,本例中可以省略break。
【讨论】:
在一行中执行此操作的类似不可变方式:
const result = mySet.filter(x => x.id === 2);
【讨论】:
Set 没有定义filter)