如何解决[... new setarray]如何在javascript中工作?
const ages = [26,27,26,28,29,30]
const uniqueAges = [...new Set(ages)]
console.log(uniqueAges) // [26,30]
我了解Spread运算符,我搜索了set,却没有找到有关它如何工作的解释。
如何设置比较项并查找相似项? 如果设置,请在“比较”中使用循环
非常感谢您的帮助
解决方法
集只能包含唯一值;这就是根据MDN构成相等值的原因:
由于
Set
中的每个值都必须唯一,因此将检查值的相等性。在早期版本的ECMAScript规范中,这不是基于与===
运算符中使用的算法相同的算法。具体来说,对于Set
,+0
(严格等于-0
)和-0
是不同的值。但是,这在ECMAScript 2015规范中已更改。有关详细信息,请参见浏览器兼容性表中的“-0
和0
的键相等”。
NaN
和undefined
也可以存储在Set
中。所有NaN
的值都相等(即NaN
与NaN
相同,即使NaN !== NaN
也是如此)。
使用传递的数组的iterable interface创建Set
时存在一个隐式循环。 ...
中还存在一个循环,该循环将可迭代对象解包。
但是,没有使用循环来检查元素Set
中是否已经存在-出于所有目的和目的,您可以将Set
视为仅包含键且没有值的字典。该代码与以下代码几乎相同:
const ages = [26,27,26,28,29,30]
const temp = {};
for (const age of ages) {
temp[age] = true;
}
const uniqueAges = [];
for (const age in temp) {
uniqueAges.push(age);
}
console.log(uniqueAges);
我故意写这种“低技术含量”的方式来说明正在发生的事情。请注意,对象键始终是字符串,因此结果将被字符串化。使用Map
或将年龄存储为 values 会使它与OP的代码更相似,但是为了说明起见,我想保持简单。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。