gpt4 book ai didi

javascript - 如何在 Javascript (ECMAScript 6) 中确定 Set 是否包含没有引用的对象(动态添加到集合中)

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:44:32 26 4
gpt4 key购买 nike

好吧,ECMAScript 6 Set 允许将对象添加到集合中。

喜欢

var s = new Set();
var o = {a: 1, b: 2};

s.add(o);
s.add("c");

确定是否存在“标量”元素(如 c)很简单:

s.has("c"); // true

如果对象元素相同呢?我认为为对象的 toString() 值提供 has() 会返回 true,但它不会

o.toString() // -> "[object Object]"
s.has("[object Object]") // -> false

如果 Sets 可以包含对象,那么它的 has() 必须知道确定是否包含给定的对象。但是如何呢?

更新:虽然上面描述的场景的解决方案也很直接 (s.has(o)),但是即时向 s 添加一个您没有引用的对象?在这种情况下,您仍然可以确定 s 是否包含该对象吗?

最佳答案

你可以直接使用对象,没有绒毛:

s.has(o);

这将返回 true。

这是可行的,因为 s Set 持有对 o 对象的引用,所以它的 has 函数只需要检查传入的对象的引用,由集合持有。

没有“丢失”引用的对象

如果你添加一个像这样的对象字面量

var s = new Set();
s.add({a: 1, b: 2});
console.log(s.has({a: 1, b: 2}));

这会导致 false,因为这两个对象具有相同的内容,但它们完全是不同的对象。如果您想测试该集合是否包含一个具有特定内容的对象,那么您必须为此编写自己的代码。最简单的算法是:

  • 遍历集合中的所有元素
    • 如果内容相同→返回true
  • 如果我们没有返回 → 返回 false

关于javascript - 如何在 Javascript (ECMAScript 6) 中确定 Set 是否包含没有引用的对象(动态添加到集合中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31852335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com