如何在JavaScript中从集合中删除对象

如何在JavaScript中从集合中删除对象,javascript,set,Javascript,Set,对于如何在JavaScript中从集合中删除特定对象,我将不胜感激。我一直无法在网上找到这个看似简单的问题的答案。 请参见以下简单示例集: let mySet = new Set([1, 2, {Name: "Ann"}]); Set(3) {1, 2, {…}} mySet.delete(1); console.log(mySet); Set(2) {2, {…}} //上面的基本语法似乎并不删除集合中的对象。我尝试了以下操作,但没有一个移除该对象: mySet.delete

对于如何在JavaScript中从集合中删除特定对象,我将不胜感激。我一直无法在网上找到这个看似简单的问题的答案。 请参见以下简单示例集:

let mySet = new Set([1, 2, {Name: "Ann"}]);

Set(3) {1, 2, {…}}



mySet.delete(1);  

console.log(mySet);

Set(2) {2, {…}}
//上面的基本语法似乎并不删除集合中的对象。我尝试了以下操作,但没有一个移除该对象:

mySet.delete({"Name": "Ann"});
false

mySet.delete("Name");
false

mySet.delete("Ann");
false
是否有其他方法可以从JavaScript中的集合中删除特定对象?也许是for…of循环,但是如何指定要删除的特定对象? 任何帮助都将不胜感激。:)

Set对象允许您存储任何类型的唯一值,无论 基本值或对象引用

因此,这将简单地向
集合添加两个对象,因为它们没有相同的对象引用

var mySet=newset([{Name:Ann},{Name:Ann}]);
console.log(mySet.size)//2
Set对象允许您存储任何类型的唯一值,无论 基本值或对象引用

因此,这将简单地向
集合添加两个对象,因为它们没有相同的对象引用

var mySet=newset([{Name:Ann},{Name:Ann}]);
console.log(mySet.size)//2
我通常做的是

  • 将集合转换为数组
  • 使用字符串化比较筛选出其中的对象*
  • 将数组转换回集合
  • *注意,因为这考虑了键的顺序

    您可以使用此功能:

    function removeObjectFromSet (set, obj) {
        return new Set([...set].filter((el) => JSON.stringify(el) != JSON.stringify(obj)))
    }
    
    例如,像这样:

    let mySet = new Set([1, 2, { Name: "Ann" }])
    
    mySet = removeObjectFromSet(mySet, { Name: "Ann" })
    console.log(mySet)
    
    我通常做的是

  • 将集合转换为数组
  • 使用字符串化比较筛选出其中的对象*
  • 将数组转换回集合
  • *注意,因为这考虑了键的顺序

    您可以使用此功能:

    function removeObjectFromSet (set, obj) {
        return new Set([...set].filter((el) => JSON.stringify(el) != JSON.stringify(obj)))
    }
    
    例如,像这样:

    let mySet = new Set([1, 2, { Name: "Ann" }])
    
    mySet = removeObjectFromSet(mySet, { Name: "Ann" })
    console.log(mySet)
    

    如果您能够在将对象传递到
    Set
    之前初始化该对象。并保留对is(即范围)的参考

    否则

    const my_set = new Set([1, 2, { name: "Ann" }]);
    my_set.forEach(item => { if (item.name === "Ann") my_set.delete(item); });
    

    如果您能够在将对象传递到
    Set
    之前初始化该对象。并保留对is(即范围)的参考

    否则

    const my_set = new Set([1, 2, { name: "Ann" }]);
    my_set.forEach(item => { if (item.name === "Ann") my_set.delete(item); });
    

    您将需要对该特定对象的引用,而不是具有相等值的新对象。使用例如
    forEach
    按集合进行迭代,并找到删除值的引用。然后删除该引用。感谢Bergi和Ivan的友好回复和分享您的知识。我非常感激!:)您将需要对该特定对象的引用,而不是具有相等值的新对象。使用例如
    forEach
    按集合进行迭代,并找到删除值的引用。然后删除该引用。感谢Bergi和Ivan的友好回复和分享您的知识。我非常感激!:)谢谢你,阿克里翁。我感谢你的指导。我喜欢使用集合内置的forEach方法来迭代集合。:)谢谢你,阿克里翁。我感谢你的指导。我喜欢使用集合内置的forEach方法来迭代集合。:)您好Mudlabs,感谢您的解决方案。正如我对Akrion所说的,使用集合的内置forEach方法现在对我来说很有意义。但我也看到了在可能的情况下,在将对象传递给集合之前初始化对象的巨大价值。在这种情况下,这似乎更为直接。谢谢!:)您好Mudlabs,感谢您的解决方案。正如我对Akrion所说的,使用集合的内置forEach方法现在对我来说很有意义。但我也看到了在可能的情况下,在将对象传递给集合之前初始化对象的巨大价值。在这种情况下,这似乎更为直接。谢谢!:)嗨,Naranjja,非常感谢您友好的回复和分享您的解决方案。我喜欢所有的数组方法都可以在将集合转换为数组后再返回集合后使用。收到各种解决方案后,我意识到能够理解所提供的每个解决方案很重要,但我很好奇上面推荐的方法中哪一种最有效地执行任务。非常感谢!:)嗨,Naranjja,非常感谢您友好的回复和分享您的解决方案。我喜欢所有的数组方法都可以在将集合转换为数组后再返回集合后使用。收到各种解决方案后,我意识到能够理解所提供的每个解决方案很重要,但我很好奇上面推荐的方法中哪一种最有效地执行任务。非常感谢!:)