JavaScript Set数据类型

1、Set定义

Set 对象允许你存储任何类型的唯一值,无论是基本类型或者是对象引用

1.1、基本类型

在 JavaScript 中,基本类型(基本数值、基本数据类型)是一种既非对象也无方法或属性的数据。有 7 种原始数据类型:

  • string
  • number
  • bigint
  • boolean
  • undefined
  • symbol
  • null

2、简述

Set 对象是值的集合,你可以按照插入的顺序迭代它的元素。

Set 中的元素只会出现一次,即 Set 中的元素是唯一的。

2.1、值的相等

Set 数据类型不会添加重复的值。

  • +0 和 -0 会被认为是两个不同的值,两个都可以存
  • undefined 和 undefined 是恒等的,只能存一个
  • NaN 与 NaN 是不恒等的,但是在 Set 中只能存一个

3、构造函数

Set 构造函数能让你创建 Set 对象,其可以存储任意类型的唯一值,无论是基本类型或者对象引用。

通过 new Set()new Set(iterable) 创建一个新的 Set 实例。(返回一个新的 Set 对象)

// new Set():创建一个空Set
var set = new Set();

// new Set(iterable):创建一个带初始值的Set
// iterable:迭代对象
var set = new Set([1, 2, 3, 4, 5]);

备注: Set() 只能用 new 构建。试图在没有 new 的情况下调用它,会抛出 TypeError。

4、Set属性

size 属性将会返回 Set 对象中元素的个数。

var set = new Set([1, 2, 3]);
console.log(set.size); // 3

size 的值是一个整数,表示 Set 对象有多少个元素。
size 的 set 访问函数是 undefined,即你不能改变这个属性。

5、Set方法

5.1、add(value)

通过 add(value) 方法向 Set 中添加指定元素。(返回一个新的 Set)

// add(value):向 Set 中添加指定元素
// value:指定元素
var set = new Set();
// 当 set 中没有指定元素时,添加指定元素
console.log(set.add(1)); // Set{ 0 => 1}
// 当 set 中存在指定元素时,不改变 set
console.log(set.add(1)); // Set{ 0 => 1}

5.2、has(value)

通过 has(value) 判断指定元素是否存在于 Set 对象中。(返回布尔值)

// has(value):判断指定元素是否存在于 Set 对象中
// value:指定元素
var set = new Set([1]);
console.log(set.has(1)); // 若存在指定元素则返回 true
console.log(set.has(2)); // 若不存在指定元素则返回 false

5.3、delete(value)

通过 delete(value) 移除 Set 对象中的指定元素。(返回布尔值)

// delete(value):移除 Set 对象中的指定元素
// value:指定元素
var set = new Set([1]);
console.log(set.delete(1)); // 若 Set 对象中存在指定元素则返回 true
console.log(set.delete(1)); // 若 Set 对象中不存在指定元素则返回 false

若要移除的元素是引用数据类型(数组、对象等),则需要移除对应的地址,而不是值。

var set = new Set();
var obj = {
	a: 1
}
set.add(obj);
console.log(set.delete({a: 1})); // 返回 false,表示移除失败,Set 对象中不存在该元素
console.log(set.delete(obj)); // 返回 true,表示移除成功,Set 对象中存在该元素

5.4、clear()

通过 clear() 移除 Set 对象中所有元素。(返回 undefined)

var set = new Set([1]);
console.log(set); // Set{ 0 => 1 }
console.log(set.clear()); // undefined
console.log(set); // Set{}

5.5、keys()

通过 keys() 获取 Set 对象的所有元素。(返回 SetIterator)

keys()values() 的别名,和 values() 用法一致,详细看下面的 values()

5.6、values()

通过 values() 获取 Set 对象的所有元素。(返回 SetIterator)

var set = new Set([1, 2, 3]);
console.log(set.keys()); // SetIterator{0 => 1, 1 => 2, 2 => 3}
console.log(set.values()); // SetIterator{0 => 1, 1 => 2, 2 => 3}

5.7、entries()

通过 entries() 获取 Set 对象的所有元素,迭代器的每个元素为 [value, value] 的形式。(返回 SetIterator)

var set = new Set([1, 2, 3]);
console.log(set.entries()); // SetIterator{ 0 => [1, 1], 1 => [2, 2], 2 => [3, 3]}

6、迭代

6.1、for…of

var set = new Set([1, 2, 3]);
for (const item of set) {
	console.log(item);
}
// 1
// 2
// 3

6.2、forEach(callback)

var set = new Set([1, 2, 3]);
set.forEach((item, index) => console.log(index + ' : ' + item));
// 1 : 1
// 2 : 2
// 3 : 3

注意:Set 对象并不是索引从1开始,而是 index 和 item 相等

如果对 forEach 有疑惑可以点击这里进行查看

6.3、迭代器

var set = new Set([1, 2]);
// 获取迭代器
const iterator = set.values();
console.log(iterator.next().value); // 1
console.log(iterator.next().value); // 2
  • 感谢你这么帅还关注了我!!!(记得一键三连)
### Set 数据类型概述 在不同编程环境中,`Set` 是一种非常有用的数据结构。这种数据结构主要用于存储唯一值的集合,在 JavaScript 和 MySQL 中都有所体现。 #### JavaScript 中的 `Set` JavaScript 的 `Set` 对象允许储存任何类型的唯一值,无论是原始值或者是对象引用[^1]。这意味着如果尝试向同一个 `Set` 实例中添加相同的值多次,则该值只会被保存一次。创建一个新的 `Set` 可以通过如下方式: ```javascript const mySet = new Set(); mySet.add(1); // 设定 1 mySet.add(5); // 设定 5 mySet.add(1); // 尝试再次设定 1, 不会生效因为已存在 console.log(mySet.size); // 输出: 2 ``` 对于遍历 `Set` 内部元素或者执行其他操作,可以利用其提供的多种内置方法来完成,比如 `.add()`, `.delete()`, `.has()` 等等。 #### MySQL 中的 SET 类型 不同于 JavaScript,MySQL 的 `SET` 数据类型用于定义能够持有零个或多个来自预定义列表值的一列[^3]。这使得当某项记录可能属于多类别时特别方便;例如,一个产品可以同时拥有不同的标签(如颜色、尺寸),这些都可以作为 `SET` 字段的一部分进行管理。 #### Redis 中的 Set 结构 Redis 提供了一种名为 `set` 的键值对形式之一,其中每个成员都是独一无二字符串[^4]。此特性使其成为处理不重复项目清单的理想选择。常用命令包括但不限于: - `SADD`: 向集合添加新成员; - `SMEMBERS`: 返回给定键下所有成员; - `SCARD`: 计算集合大小; - `SREM`: 移除特定成员; - `SISMEMBER`: 测试某个元素是否存在于此集中。 #### C++ STL 库里的 set 容器 C++ Standard Template Library (STL) 中同样实现了自己的版本——`std::set`[^5]。这是一个关联容器,内部自动保持有序状态并确保各元素互异。要使用这个功能强大的工具箱组件,需引入相应头文件 `<set>` 并声明实例化对象即可开始工作。 ```cpp #include <iostream> #include <set> int main(){ std::set<int> int_set; // 插入一些整数到 set 中... } ``` 以上就是关于几种常见环境下 `Set` 或者相似概念下的实现简介及其主要特点描述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jackson Mseven

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值