es6 세트의 용도는 무엇입니까?

青灯夜游
풀어 주다: 2022-10-24 17:55:55
원래의
1906명이 탐색했습니다.

Set은 순서가 지정된 데이터를 저장하는 데 사용되는 데이터 구조입니다. Set의 요소는 고유하며 동일한 요소를 저장할 수 없습니다. Set()은 반복 가능한 개체를 매개 변수로 허용할 수 있지만 이 반복 가능한 개체는 동일한 콘텐츠입니다. 제거되므로 중복 요소를 제거하고 "Array.from(new Set(arr))" 또는 "[...new Set(arr)]"을 방지하는 데 사용할 수 있습니다.

es6 세트의 용도는 무엇입니까?

이 튜토리얼의 운영 환경: Windows 7 시스템, ECMAScript 버전 6, Dell G3 컴퓨터.

1. 기본 사용법

SetES6에서 제공하는 새로운 데이터 구조로 배열처럼 정렬된 데이터를 저장하는 데 사용됩니다. 즉, 배열처럼 인덱싱을 통해 특정 요소를 얻을 수 없습니다. SetES6 提供的一种新的数据结构,它跟数组一样用于存储有序的数据,但是没有随机访问的能力,也就是说,不能像数组一样通过索引来获取具体的某个元素。除此以外,最重要的是,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 实例的方法可以分为两类:操作方法和遍历方法。

1.操作方法

  • 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)
로그인 후 복사

2.遍历方法

  • Set.prototype.keys() —— 返回键名的遍历器
  • Set.prototype.values() —— 返回键值的遍历器
  • Set.prototype.entries() —— 返回键值对的遍历器
  • Set.prototype.forEach() —— 使用回调函数遍历元素

由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以 keys 方法和 values 方法的行为完全一致。

三、WeakSet

WeakSetSet 的升级版,主要有两个区别:

  • 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

요소의 고유성을 사용하여 배열을 중복 제거할 수 있습니다. 🎜rrreee🎜멋지네요. 마찬가지로 이 기능을 사용하여 문자열에서 동일한 문자를 중복 제거할 수도 있습니다. 🎜rrreee🎜그런데 위의 내용은 모두 Set 유형 요소의 고유성을 통해 달성되는데, Set는 요소가 고유한지 내부적으로 어떻게 결정합니까? 내부적으로는 합동 연산자와 거의 동일한 Same-value-zero 동등성 알고리즘을 사용합니다. 차이점은 이 알고리즘은 NaN와 동일하다고 간주한다는 것입니다. >NaN 코드>. 🎜🎜🎜2. 인스턴스 속성 및 메소드🎜🎜<h3>🎜인스턴스 속성🎜</h3>🎜<code>Set.prototype에서는 size 속성이 정의되어 있습니다. 요소 번호. 🎜rrreee

🎜인스턴스 메서드🎜

🎜Set 인스턴스 메서드는 작업 메서드와 순회 메서드의 두 가지 범주로 나눌 수 있습니다. 🎜

🎜1. 작업 방법🎜

  • Set.prototype.add(value) - Set에 값을 추가합니다. Set 자체의 끝입니다.
  • Set.prototype.delete(value) - 값을 삭제하고 삭제 성공 여부를 나타내는 부울 값을 반환합니다.
  • Set.prototype.has(value) - 값이 Set의 요소인지 여부를 나타내는 부울 값을 반환합니다.
  • Set.prototype.clear() - 모든 멤버를 지우고 반환 값은 없습니다.
🎜 add() 메서드의 반환이 Set 자체라는 점을 언급할 가치가 있으므로 체인 호출을 생각할 수 있어야 합니다. : 🎜rrreee

🎜2. 탐색 방법🎜

  • Set.prototype.keys() - 키 이름의 탐색자를 반환합니다.
  • Set.prototype.values() - 키-값 쌍의 순회자를 반환합니다.
  • Set.prototype.entries() - 키의 순회자를 반환합니다. -값 쌍
  • Set.prototype.forEach() —— 콜백 함수를 사용하여 요소를 순회합니다.
🎜Set 구조에는 키 이름이 없고 키 값만 있습니다(또는 키 이름과 키 값이 동일한 값임). 따라서 keys 메소드는 values와 정확히 동일하게 작동합니다. > 방법. 🎜🎜🎜3. WeakSet🎜🎜🎜WeakSetSet의 업그레이드 버전입니다. 🎜
  • WeakSet는 기본 유형 데이터가 아닌 참조 유형만 저장할 수 있습니다.
  • WeakSet의 참조 유형은 모두 약한 참조입니다.
🎜첫 번째 요점은 이해하기 쉽습니다. 즉, 기본 유형의 데이터는 저장할 수 없습니다. 🎜rrreee🎜그 다음 두 번째 요점은 WeakSet의 개체입니다. > 모두 약한 참조입니다. 이는 가비지 수집 메커니즘이 개체에 대한 WeakSet의 참조를 고려하지 않음을 의미합니다. 외부 참조 수가 0에 도달하면 가비지 수집 메커니즘에 의해 처리될 때까지 기다립니다. 따라서 WeakSet은 개체 그룹을 임시로 저장하는 데 적합합니다. 🎜🎜이 기능으로 인해 WeakSet의 멤버는 언제든지 정리될 가능성이 있으므로 참조에 적합하지 않습니다. 그러나 ES6에서는 통과할 수 없다고 규정합니다. . 🎜🎜 WeakSet의 메서드는 위에서 언급한 Set와 기본적으로 동일하지만, size 속성과 traverser 메서드가 없습니다. 🎜🎜【관련 추천: 🎜javascript 비디오 튜토리얼🎜, 🎜프로그래밍 비디오🎜】🎜

위 내용은 es6 세트의 용도는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿