[... 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规范中已更改。有关详细信息,请参见浏览器兼容性表中的“ -00的键相等”。

NaNundefined也可以存储在Set中。所有NaN的值都相等(即NaNNaN相同,即使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的代码更相似,但是为了说明起见,我想保持简单。