Set은 순서가 지정된 데이터를 저장하는 데 사용되는 데이터 구조입니다. Set의 요소는 고유하며 동일한 요소를 저장할 수 없습니다. Set()은 반복 가능한 개체를 매개 변수로 허용할 수 있지만 이 반복 가능한 개체는 동일한 콘텐츠입니다. 제거되므로 중복 요소를 제거하고 "Array.from(new Set(arr))" 또는 "[...new Set(arr)]"을 방지하는 데 사용할 수 있습니다.
이 튜토리얼의 운영 환경: Windows 7 시스템, ECMAScript 버전 6, Dell G3 컴퓨터.
Set
은 ES6
에서 제공하는 새로운 데이터 구조로 배열처럼 정렬된 데이터를 저장하는 데 사용됩니다. 즉, 배열처럼 인덱싱을 통해 특정 요소를 얻을 수 없습니다. Set
是 ES6
提供的一种新的数据结构,它跟数组一样用于存储有序的数据,但是没有随机访问的能力,也就是说,不能像数组一样通过索引来获取具体的某个元素。除此以外,最重要的是,Set
中的元素具有唯一性,不允许存储相同的元素!
Set
是一个构造函数,用于实例化实例:
let set = new Set() set.add(1)//往set集合中添加元素1
除此以外,Set()
可以接受一个可迭代对象作为参数,以作为实例初始化的数据,但是会将这个可迭代对象中相同的内容去除,然而,这也是数组去重的一个方法。
let set = new Set([1,2,2,1,4,3,5]) console.log(set)//Set(5) {1, 2, 4, 3, 5}
由元素唯一性这个特点,可以利用在数组去重上:
//方法一: Array.from(new Set(arr)) //arr是待去重的数组 //方法二: [...new Set(arr)]
太酷了吧,类似的,利用这个特性还能实现字符串相同字符的去重。
[...new Set(str)].join('')
然而,上面都是通过 Set
类型元素的唯一性来实现的,那么 Set
内部是如何判断元素是否唯一的呢?它的内部使用了一个算法 Same-value-zero equality
,大致与全等运算符一致,区别在于这种算法认为 NaN
等于 NaN
。
在 Set.prototype
上,定义了一个属性 size
表示元素的个数。
let set = new Set([1,2,2,1,4,3,5]) console.log(set.size)//5
Set
实例的方法可以分为两类:操作方法和遍历方法。
Set.prototype.add(value)
—— 添加某个值到 Set
的末尾,返回 Set
本身。Set.prototype.delete(value)
—— 删除某个值,返回布尔值,表示是否删除成功。Set.prototype.has(value)
—— 返回一个布尔值,表示该值是否为 Set
的元素。Set.prototype.clear()
—— 清除所有成员,没有返回值。值得一提的是,add()
方法的返回是 Set
本身,所以你应该能想到链式调用:
let set = new Set() set.add(1).add(2).add(3)
Set.prototype.keys()
—— 返回键名的遍历器Set.prototype.values()
—— 返回键值的遍历器Set.prototype.entries()
—— 返回键值对的遍历器Set.prototype.forEach()
—— 使用回调函数遍历元素由于 Set
结构没有键名,只有键值(或者说键名和键值是同一个值),所以 keys
方法和 values
方法的行为完全一致。
WeakSet
WeakSet
是 Set
的升级版,主要有两个区别:
WeakSet
只能存储引用类型,不能储存基本类型数据。WeakSet
中的引用类型都是弱引用。首先,第一点很好理解,就是不能存储基本类型的数据:
const ws = new WeakSet() ws.add(1)//报错,Invalid value used in weak set
然后第二点,WeakSet
中的对象都是弱引用。也就意味着垃圾回收机制不会考虑 WeakSet
对该对象的引用,一旦在外部引用计数为0,那么就等着被垃圾回收机制处理。所以,WeakSet
适合临时存放一组对象。
由于这个特征,WeakSet
中的成员是不适合引用的,因为它很可能会随时被清理,然而,ES6
规定它是不可遍历的。
WeakSet
中的方法也跟上面提到的 Set
基本一致,但是它没有 size
또한 가장 중요한 것은 Set
의 요소는 고유하며 동일한 요소가 저장될 수 없다는 것입니다!
Set
는 인스턴스를 인스턴스화하는 데 사용되는 생성자입니다. rrreee또한 Set()
는 반복 가능한 객체를 매개변수, 인스턴스 초기화 데이터로 받아들일 수 있습니다. 하지만 이 반복 가능한 객체의 동일한 콘텐츠는 제거됩니다. 그러나 이는 배열 중복 제거 방법이기도 합니다. rrreee
Set
유형 요소의 고유성을 통해 달성되는데, Set
는 요소가 고유한지 내부적으로 어떻게 결정합니까? 내부적으로는 합동 연산자와 거의 동일한 Same-value-zero 동등성
알고리즘을 사용합니다. 차이점은 이 알고리즘은 NaN
을 와 동일하다고 간주한다는 것입니다. >NaN 코드>. 🎜🎜🎜2. 인스턴스 속성 및 메소드🎜🎜<h3>🎜인스턴스 속성🎜</h3>🎜<code>Set.prototype
에서는 size
속성이 정의되어 있습니다. 요소 번호. 🎜rrreeeSet
인스턴스 메서드는 작업 메서드와 순회 메서드의 두 가지 범주로 나눌 수 있습니다. 🎜Set.prototype.add(value)
- Set
에 값을 추가합니다. Set
자체의 끝입니다. Set.prototype.delete(value)
- 값을 삭제하고 삭제 성공 여부를 나타내는 부울 값을 반환합니다. Set.prototype.has(value)
- 값이 Set
의 요소인지 여부를 나타내는 부울 값을 반환합니다. Set.prototype.clear()
- 모든 멤버를 지우고 반환 값은 없습니다. add()
메서드의 반환이 Set
자체라는 점을 언급할 가치가 있으므로 체인 호출을 생각할 수 있어야 합니다. : 🎜rrreee Set.prototype.keys()
- 키 이름의 탐색자를 반환합니다.Set.prototype.values()
- 키-값 쌍의 순회자를 반환합니다.Set.prototype.entries()
- 키의 순회자를 반환합니다. -값 쌍 Set.prototype.forEach()
—— 콜백 함수를 사용하여 요소를 순회합니다. Set
구조에는 키 이름이 없고 키 값만 있습니다(또는 키 이름과 키 값이 동일한 값임). 따라서 keys
메소드는 values
와 정확히 동일하게 작동합니다. > 방법. 🎜🎜🎜3. WeakSet
🎜🎜🎜WeakSet
은 Set
의 업그레이드 버전입니다. 🎜WeakSet
는 기본 유형 데이터가 아닌 참조 유형만 저장할 수 있습니다. WeakSet
의 참조 유형은 모두 약한 참조입니다. WeakSet
의 개체입니다. > 모두 약한 참조입니다. 이는 가비지 수집 메커니즘이 개체에 대한 WeakSet
의 참조를 고려하지 않음을 의미합니다. 외부 참조 수가 0에 도달하면 가비지 수집 메커니즘에 의해 처리될 때까지 기다립니다. 따라서 WeakSet
은 개체 그룹을 임시로 저장하는 데 적합합니다. 🎜🎜이 기능으로 인해 WeakSet
의 멤버는 언제든지 정리될 가능성이 있으므로 참조에 적합하지 않습니다. 그러나 ES6
에서는 통과할 수 없다고 규정합니다. . 🎜🎜 WeakSet
의 메서드는 위에서 언급한 Set
와 기본적으로 동일하지만, size
속성과 traverser 메서드가 없습니다. 🎜🎜【관련 추천: 🎜javascript 비디오 튜토리얼🎜, 🎜프로그래밍 비디오🎜】🎜위 내용은 es6 세트의 용도는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!