Set 对象

Set对象详解:JavaScript中独特的值集合,
本文介绍了Set对象在JavaScript中的特性,包括它是无键值对的值集合,支持add、has等方法,以及实例属性如size、clear、delete等,展示了如何使用实例方法如forEach遍历元素。

Set 对象

set对象允许你储存任何类型的唯一值,无论是原始值或者是对象引用。
set对象是值的集合,所以set是不存在键的。你会发现set对象中并不存在get、set方法,只是存在add、has方法。
set对象是值的集合,你可以按照插入的顺序迭代它的元素。Set中的元素只会出现一次,即Set中的元素是唯一的。
值的相等
因为Set中的值总是唯一的,所以需要判断两个值是否相等。在ECMAScript规范的早期版本中,这不是基于和===操作符中使用的算法相同的算法。具体来说,对于Set+0(+0严格相等于-0)和-0是不同的值。然而,在ECMAScript 2015规范中这点已被更改。换句话说,现在的浏览器在Set中认为+0 0 -0都是相同的。
另外,NaNundefined都可以被存储在Set中,NaN之间被视为相同的值NaN被认为是相同的,尽管NaN !== NaN
**set**构造函数参数
set构造函数接收一个可迭代对象,可迭代对象内部的元素将成为Set对象的元素。
set对象中是不存在键的,虽然你在浏览器中会发现[[Entries]]属性中会存在0,1,2,3这种类似键名的东西。这只是浏览器给你展示出键值对的效果而已,实际上Set对象并不存在键。

const set = new Set(1); // 报错

const set = new Set([1, 2, 3, undefined, NaN, {}]);
console.log(set);

image.png
**Set**实例属性、实例方法
Set实例属性size:返回Set对象中值的个数。注意是[[Entries]]属性内部值的个数,并不是Set对象自身的属性个数。
Set实例方法:

  1. add:在Set对象尾部添加一个元素。返回该set对象。
  2. clear:移除set对象内部的所有元素。
  3. delete:移除值为value的元素,并返回一个布尔值来表示是否移除成功。Set.prototype.has(value)会在此之后返回false
  4. has:返回一个布尔值,表示该值在Set中存在与否。
  5. keys:与values()方法相同,返回一个新的迭代器对象,该对象包含set对象中的按插入顺序排列的所有元素的值。
  6. values:返回一个新的迭代对象,该对象包含set对象中的按插入顺序排列的所有元素的值。
  7. entries:返回一个新的迭代对象,该对象包含Set对象中的按插入顺序排列的所有元素的值的[value, value]数组。为了使这个方法和Map对象保持相似,每个值的键和值相同。因为set对象是不存在键的。
  8. forEach:按照插入的顺序,为Set对象中的每一个值调用一次callbackFn。如果提供了thisArg参数,回调中的this会是这个参数。
const set = new Set([1, 2, false, 'true', 'str']);
set.forEach((key, value) => {
	console.log(key, value); // 1, 1  2, 2  false, false
});
Set 对象允许存储任何类型的唯一值,无论是原始值或者是对象引用。以下是关于Set对象的详细介绍: ### 定义与特点 Set 对象存储的值总是唯一的,这一特性使其在处理需要去重的场景时非常实用,可用于实现数组和字符串的去重 [^2]。 ### 使用方法 #### 创建 Set 对象 可创建一个空的Set,之后添加元素;也可以在创建时就传入数组来初始化。示例代码如下: ```javascript // 创建空的Set并添加元素 let set1 = new Set(); set1.add(1); set1.add(2); set1.add(3); // 创建时传入数组初始化 let set2 = new Set([1, 2, 3, 3, 1, 4]); ``` #### 常用属性和方法 - `size`:返回集合所包含元素的数量。 - `add(value)`:向集合添加一个新的项,返回Set对象本身。 - `has(value)`:判断集合中是否含有指定值,返回布尔值。 - `delete(value)`:从集合中删除指定值,若删除成功返回 `true`,失败返回 `false`。 - `clear()`:清空集合中的所有值。 - `values()`:输出所有的值,`keys()` 用法与之相同。 - `entries()`:返回两倍的set数据,每个entry是长度为2的数组 `[value, value]`,不推荐使用。 示例代码如下: ```javascript let set = new Set([1, 2, 3]); console.log(set.size); // 3 set.add(4); console.log(set.has(2)); // true set.delete(3); console.log(set.size); // 3 set.clear(); console.log(set.size); // 0 let newSet = new Set([1, 2, 3]); let values = newSet.values(); for (let value of values) { console.log(value); } let entries = newSet.entries(); for (let [key, value] of entries) { console.log(key, value); } ``` #### 遍历 Set 对象 可以使用 `forEach` 方法对每个元素执行指定操作。示例代码如下: ```javascript let set = new Set([1, 2, 3]); set.forEach(function(value) { console.log(value); }); ``` ### Redis 中 Set 结构 在Redis 7.2之前,set使用的是 `intset` 和 `hashtable`;在Redis 7.2之后,set使用的是 `intset`、`listpack`、`hashtable` [^1]。 ### C++ 中 Set 的使用 C++ 的Set有其对应的文档介绍、构造函数,常用函数包括迭代器、容量、修改函数(插入、修改、查找、删除等) [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

️不倒翁

你的鼓励就是我前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值