如何在 JavaScript 中从 Set 中删除对象

Che*_*ess 5 javascript set

我希望获得有关如何从 JavaScript 中的 Set 中删除/删除特定对象的帮助。我一直无法在网上找到这个看似简单的问题的答案。\n请参阅以下简单示例集:

\n\n
let mySet = new Set([1, 2, {Name: "Ann"}]);\n\nSet(3) {1, 2, {\xe2\x80\xa6}}\n\n\n\nmySet.delete(1);  \n\nconsole.log(mySet);\n\nSet(2) {2, {\xe2\x80\xa6}}\n
Run Code Online (Sandbox Code Playgroud)\n\n

// 上面的基本语法似乎并没有删除 Set 中的对象。我尝试了以下操作,但都没有删除该对象:

\n\n
mySet.delete({"Name": "Ann"});\nfalse\n\nmySet.delete("Name");\nfalse\n\nmySet.delete("Ann");\nfalse\n
Run Code Online (Sandbox Code Playgroud)\n\n

是否有其他方法可以从 JavaScript 中的 Set 中删除特定对象?也许是一个 for...of 循环,但是如何指定要删除的特定对象呢?\n任何帮助将不胜感激。:)

\n

Akr*_*ion 8

Set 对象允许您存储任何类型的唯一值,无论是原始值还是对象引用

因此,这只会添加 2 个对象,Set因为它们没有相同的对象引用。

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

console.log(mySet.size) // 2
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您也可以使用数组。

因此,在这种情况下,要删除Ann(因为我们没有对象引用),我们必须:

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

console.log('With Ann size:', mySet.size)

mySet.forEach(x => x.Name === 'Ann' ? mySet.delete(x) : x)

console.log('Bye Ann size:', mySet.size)
Run Code Online (Sandbox Code Playgroud)

现在考虑一下:

var ann = {Name: 'Ann'}
var mySet = new Set([ann, ann])

console.log('With Ann size:', mySet.size)

mySet.delete(ann)

console.log('Bye Ann size:', mySet.size)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我们现在正在处理对象引用,首先大小仅为1,现在可以毫无问题地Set找到ann 引用并将其删除。