【问题标题】:Delete an item from a JavaScript set从 JavaScript 集中删除项目
【发布时间】:2021-01-13 00:38:21
【问题描述】:

如何从有条件的集合中删除一个项目

if(item.id === 2){
   mySet.delete(item)
}

我不能使用mySet.has(item),因为对象中唯一常见的就是id。

【问题讨论】:

    标签: javascript set


    【解决方案1】:

    除非您已经拥有对该对象的引用,否则您必须将 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]);

    【讨论】:

      【解决方案2】:

      您可以创建剩余项目的数组,例如

      var resultArr = [];    
      yourobj.forEach((item,index)=>{ 
              if(item.id === 2)
              {
                // nothing
              }  
              else
              {
                  resultArr.push(item);
              }
      })
      

      【讨论】:

        【解决方案3】:

        您可以使用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

        【讨论】:

          【解决方案4】:

          在一行中执行此操作的类似不可变方式:

          const result = mySet.filter(x => x.id === 2);
          

          【讨论】:

          • 你试过了吗? (Set 没有定义filter
          猜你喜欢
          • 1970-01-01
          • 2014-05-01
          • 2015-10-25
          • 1970-01-01
          • 2013-01-17
          • 2012-12-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多