>웹 프론트엔드 >JS 튜토리얼 >ECMAScript6_javascript 스킬의 Set/WeakSet에 대한 자세한 설명

ECMAScript6_javascript 스킬의 Set/WeakSet에 대한 자세한 설명

WBOY
WBOY원래의
2016-05-16 15:55:281210검색

ES6에는 Java의 Set과 마찬가지로 중복 요소를 저장하지 않는 새로운 데이터 구조화 Set이 추가되었습니다. Set은 클래스로 구현되며 사용하기 전에 새로 설정되어야 합니다.

var s1 = new Set()
s1.add(1)
s1.add(2)
s1.add(3)
s1.add(1)
 
var s2 = new Set()
s2.add('a')
s2.add('a')
 
// 输出1,2, 3
for (var i of s1 ) {
  console.log(i)
}
// 输出a
for (var i of s2 ) {
  console.log(i)
}

위의 요소를 추가하려면 Set의 add 메소드를 사용하세요.

Set 생성자는 배열을 매개변수로 허용할 수도 있습니다

var s3 = new Set([1,2,3,1])
s3.size // 3

반복되는 숫자 1이 아직 들어가지 않은 것을 볼 수 있습니다. 그리고 Set의 길이를 구하려면 길이가 아닌 Size를 사용하세요.

{} 또는 []의 경우 두 개의 동일한 객체라는 점에 유의해야 합니다

var s4 = new Set()
s4.add({})
s4.add({})
s4.size // 2

1. 트래버스 세트(용)

var s1 = new Set()
s1.add(1)
s1.add(2)
s1.add(3)
 
// 输出1,2, 3
for (var i of s1) {
  console.log(i)
}

2. 집합을 배열로 변환

var s1 = new Set()
s1.add(1)
s1.add(2)
 
// toArray
var a1 = Array.from(s1)
Array.isArray(a1) // true
 
// or
var a1 = [...new Set(s1)] 

3. Set을 사용하여 어레이 중복 제거

function distinct(arr) {
  return Array.from(new Set(arr))
// return [...new Set(arr)]
}

세트의 속성

건축자
사이즈
설정방법

has(val)은 요소가 존재하는지 확인합니다
add(val) 요소를 추가합니다
delete(val) 요소 삭제
Clear는 모든 요소를 ​​제거합니다
열쇠
가치
항목
forEach는 요소를 순회합니다
지도
필터

4. 위크세트

WeakSet과 Set은 중복된 요소를 저장하지 않지만 몇 가지 차이점이 있습니다

1. 객체 유형 요소만 저장

ws = new WeakSet()
ws.add(1)

FF에서 보고된 오류는 다음과 같습니다

2. 추가/삭제/지우기/가짐 세 가지 방법만 있으며 순회할 수 없으며 크기 속성 등이 없습니다.

ws = new WeakSet()
ws.size // undefined
ws.forEach // undefined

MDN 설명

WeakSet 개체에 저장된 개체 값은 약하게 참조됩니다. 다른 변수나 속성이 개체 값을 참조하지 않으면 개체 값이 가비지 수집됩니다. 이로 인해 WeakSet 개체를 열거할 수 없습니다. 포함된 모든 요소를 ​​가져올 수 있는 방법은 없습니다

WeakSet은 주로 DOM 노드를 저장하는 데 사용됩니다. 이러한 노드가 문서에서 제거되면 메모리 누수가 발생하지 않습니다.

위 내용은 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.