gpt4 book ai didi

javascript - Set.prototype.has() 带谓词

转载 作者:搜寻专家 更新时间:2023-11-01 04:29:56 26 4
gpt4 key购买 nike

var myset = new Set();

myset.add({ key: 123, value: 100 });
var has = myset.has({ key: 123, value: 100 });
console.log(has); // false

var obj = {
key: 456,
value: 200
};

myset.add(obj);
has = myset.has(obj);
console.log(has); // true

has = myset.has(x => x.key === 123);
console.log(has); // false

本例中的问题:我只是将{ key: 123, value: 100 } 添加到myset中,为什么它不包含{ key: 123,值:100 ?

另一种情况,如果我使用 obj 而不是 { key: 123, value: 100 } ,它将返回 true

Set.prototype.has() 说:

The has() method returns a boolean indicating whether an element with the specified value exists in a Set object or not.

但这并没有提到:什么是指定值

显然,在这种情况下 { key: 123, value: 100 } { key: 123, value: 100 } 类似于,并且...我收到了 false。那么这里的指定是什么?

第二个问题:为什么他们不支持 has() 方法中的 predicate

在我的例子中。如果我使用 for...of... 会更难搜索:

for (let obj of myset) {
if (obj.key === 123) return true;
}

虽然它可以与谓词内联:

has = myset.has(x => x.key === 123)

那么, future 是否应该对其进行改进?

最佳答案

Set.prototype.has找不到对象,因为它使用 value equality 进行测试, 意思是:

{ key: 123 } !== { key: 123 } // true

如果您希望能够根据谓词查找项目,则必须手动添加该函数。该函数可能还不存在,因为 Set 仅在您需要无需迭代的快速查找时才有效。如果您想迭代值,请改用数组。

下面是如何实现它,就像 Array.prototype.find 一样:

Set.prototype.find = function () {
return Array.prototype.find.apply([...this], arguments);
};

关于javascript - Set.prototype.has() 带谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38962174/

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