一. 了解 Set
1. 概念和用处
Set 是 JavaScript 中的一种调集(collection)数据结构,它类似于数组,可是调集中的元素是仅有的,不允许重复。Set 供给了一种存储不重复数值或目标的机制,可以用于存储一组仅有的值,而且具有一些方便的办法来操作这些值。
2. 为什么运用 Set
- 仅有性: Set 中的元素是仅有的,不允许重复。这使得 Set 成为一种方便的去重东西,可以快速地除掉数组或其他数据结构中重复的元素。
- 功能优势: 由于 Set 的内部完结运用了哈希表等高效数据结构,因此在查找和刺进元素时具有较好的功能,特别是在处理大量数据时,运用 Set 可以提高处理功率。
- 丰厚的办法: Set 供给了丰厚的操作办法,如增加元素、删去元素、查找元素、调集运算等,使得开发者可以方便地对调集进行操作。
JavaScript 的 Set 数据结构供给了一种高效、方便且具有仅有性的调集存储机制,适用于处理需求仅有性数据的场景,例如去重、符号已拜访元素等。
二. 创立 Set
1. 运用结构函数创立 Set
在 JavaScript 中,您可以运用 Set 结构函数来创立一个新的 Set 实例。详细操作如下:
// 创立一个空的 Set
let mySet = new Set();
// 创立包括初始元素的 Set
let initialSet = new Set([1, 2, 3, 4, 5]);
2. 增加元素到 Set
可以运用 add
办法将元素增加到 Set 中,保证每个元素都是仅有的,不会重复增加:
// 创立一个空的 Set
let mySet = new Set();
// 增加元素到 Set
mySet.add(1);
mySet.add(2);
mySet.add(3);
3. 从数组创立 Set
可以运用数组的元素来创立一个 Set 实例,数组中的重复元素将被自动去重:
// 创立一个包括重复元素的数组
let duplicatesArray = [2, 3, 4, 4, 5, 5];
// 运用数组来创立 Set,一起来去重
let uniqueSet = new Set(duplicatesArray);
// 此刻 uniqueSet 为 {2, 3, 4, 5}
经过上述办法,您可以很容易地创立 Set 并向其间增加元素,也可以经过数组快速地创立并去重一个 Set 目标。
三. Set 的特性
Set 是一种数据结构,它包括一组仅有且无序的值。在 JavaScript 中,Set 以目标的形式存在,其间的值只能呈现一次。以下是 Set 的一些特性阐明:
1. 仅有性
Set 中的值有必要是仅有的。假如将相同的值参加 Set 屡次,只会存储一次这使得 Set 成为去重数据的想结构。
let uniqueSet = new Set();
uniqueSet.add(1);
uniqueSet.add(2);
uniqueSet.add(1);
console.log(uniqueSet); // 输出: Set(2) {1, 2}
2. 无序性
在 Set 中,值的排列次序不是照刺进的次序来决定的。这意味着无法依赖 Set 的次序性进行操作。
let unorderedSet = new Set();
unorderedSet.add(3);
unorderedSet.add(1);
unorderedSet.add(2);
console.log(unorderedSet); // 输出: Set(3) {3, 1, 2}
3. 可迭代性
Set 是可经过迭代器进行遍历,可以运用 for… 循环或许 Array.from 办法将 Set 转化数组。
let iterableSet = new Set([1, 2, 3]);
for (let item of iterableSet) {
console.log(item);
}
// 输出:
// 1
// 2
// 3
4. 长度特点
Set 实例有 size 特点,表明 Set 中值的数量。
let sizedSet = new Set([1, 2, 3, 4, 5]);
console.log(sizedSet.size); // 输出: 5
5. 增加和删去
Set 具有增加值的 add 办法,移值的 delete 办法,以及清空所有值的 clear 办法。
let addDeleteSet = new Set();
addDeleteSet.add(1);
addDeleteSet.add(2);
console.log(addDeleteSet); // 输出: Set(2) {1, 2}
addDeleteSet.delete(1);
console.log(addDeleteSet); // 输出: Set(1) {2}
addDeleteSet.clear();
console.log(addDeleteSet); // 输出: Set(0) {}
6. 判断值是否存在
可以运用 has 办法来查看某一特定值是否存在 Set 中。
let hasSet = new Set([1, 2, 3]);
console.log(hasSet.has(2)); // 输出: true
console.log(hasSet.has(4)); // 输出: false
7. 引证
在 Set 中存储的值弱引证的,意味着假如没有其他引证指向 Set 中的某个值,那么这个值可能会被废物回收。
总的来说 Set 是一种十分有用的数据结构,特别适用于需求存储唯值而且不需求考虑次序的状况。它的高效去重能力和调集操作特性,使得它在实践开发中有着广泛的使用。
四. Set 的办法
1. 增加元素:add()
运用 add()
办法向 Set 中增加新的元素。
let mySet = new Set();
mySet.add(1);
mySet.add(2);
mySet.add(3);
2. 删去元素:delete()
运用 delete()
办法从 Set 中删去指定的元素。
mySet.delete(2); // 从 Set 中删去元素 2
3. 查看元素是否存在:has()
运用 has()
办法查看指定元素是否存在于 Set 中。
mySet.has(1); // 查看 Set 中是否存在元素 1,返回成果为 true 或
4. 清空 Set:clear()
运用 clear()
办法清空 Set 中所有元素。
mySet.clear(); // 清空 Set
5. 获取 Set 的巨细:size 特点
运用 size
特点获取 Set 内元素数量。
let setSize = mySet.size; 获取 Set 的巨细
掌握以上的这些办法可以协助你在开发过程中,熟练的对 Set 进行元素的增查操作,以及 Set 的巨细信息。
五. 留意事项
经过上面的了解,咱们基本知道到了 Set 的特性以及最常用的运用办法,可是在运用 Set 时,有几个留意事项需求咱们提前了解一下,下面是我总结的运用 Set 时需求留意的几个事项:
1. 值的仅有性
Set 中的值有必要是仅有的,相同的值不会被重复存储。这意味着当你向一个 Set 中增加已存在的值时,不会有任何变化。因此,要保证你向 Set 增加的值是仅有的,不然可能会导致意外的成果。
2. 目标引证
Set 存储的是值的引证,而不是仿制。这意味着当你向 Set 增加一个目标时,实践存储的是目标的引证而不是目标自身。这可能会导致一些意想不到的成果,特别是在修正目标时。请留意在修正目标后查看 Set 中的值是否也会被修正。
3. NaN 的处理
在 Set 中,NaN 被视为是相同的值,即 NaN 只能存储一次。这可能与你的预期不同,由于在其他当地 NaN 通常被视为是不相同的值。所以,保证在运用 Set 存储 NaN 时,不会呈现重复的状况。
const set = [...new Set([Number("one"), Number("two"), "one", "two"])];
console.log(set);
4. 不支持索引拜访
Set 不支持经过索引来拜访值,由于它的值是无序的。假如你需求经过索引拜访值,请考虑运用 Array。
5. 类型转化
当咱们向 Set 中增加值的时候,不会进行类型转化,即 ‘1’和 1 是不相同的
const set = [...new Set([1, "1"])];
console.log(set);
在运用 Set 时需求针对详细场景进行合理的挑选和留意。尽管 Set 在去重和调集操作等方面十分有用,但也需求留意它的特性和限制,以便正确运用和处理数据。
六. 总结
经过对本文的学习,咱们都知道了 Set 是 JavaScript 中的一种数据结构,它供给了一种用于存储仅有值的机制,一起还具有高效的数据操作能力。
首先,咱们了解了 Set 的核心特性:仅有性、无序性、可迭代性以及长度特点等。这些特性使得 Set 成为一个强壮的去重东西,而且具有高效的调集操作能力。
紧接着,咱们逐一介绍了 Set 的各种办法的运用。咱们学习了如何向 Set 中增加和删去值,经过 add
、delete
和 clear
办法完结这些操作。咱们还了解了如何判断某个值是否存在于 Set 中,经过 has
办法可以快速判断。
在实践开发中,Set 有着广泛的使用。无论是从一个数组中快速去重重复的值,还是使用调集操作来处理数据,Set 都能供给便当且高效的解决方案。
总而言之,Set 是 JavaScript 中的一个重要而强壮的数据结构。经过深化了解 Set 的特性和办法,咱们可以更好地使用它来解决实践问题。