我希望获得有关如何从 JavaScript 中的 Set 中删除/删除特定对象的帮助。我一直无法在网上找到这个看似简单的问题的答案。\n请参阅以下简单示例集:
\n\nlet 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}}\nRun Code Online (Sandbox Code Playgroud)\n\n// 上面的基本语法似乎并没有删除 Set 中的对象。我尝试了以下操作,但都没有删除该对象:
\n\nmySet.delete({"Name": "Ann"});\nfalse\n\nmySet.delete("Name");\nfalse\n\nmySet.delete("Ann");\nfalse\nRun Code Online (Sandbox Code Playgroud)\n\n是否有其他方法可以从 JavaScript 中的 Set 中删除特定对象?也许是一个 for...of 循环,但是如何指定要删除的特定对象呢?\n任何帮助将不胜感激。:)
\nSet 对象允许您存储任何类型的唯一值,无论是原始值还是对象引用。
因此,这只会添加 2 个对象,Set因为它们没有相同的对象引用。
var mySet = new Set([{Name: "Ann"}, {Name: "Ann"}]);
console.log(mySet.size) // 2Run 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 引用并将其删除。