ES6 학습 - Set & WeakSet

5052 단어
브 라 우 저 지원 상황 검사
'use strict'
var map = new Map();
var set = new Set();
alert('     map set')

alert 가 나 오 면 지원 을 설명 합 니 다.
콘 셉 트
set - 새로운 데이터 구 조 는 배열 과 유사 하지만 구성원 의 값 은 유일 하고 중복 되 지 않 습 니 다.set 자 체 는 set 데이터 구 조 를 만 드 는 구조 함수 입 니 다.
add 를 통 해 set 구조 에 구성원 을 추가 하면 set 구조 에 중복 되 는 값 을 추가 하지 않 음 을 알 수 있 습 니 다. (여기 add 는 set 구조의 방법 입 니 다)
var s = new Set();
[2,3,5,2,6,3,5].map(x => s.add(x));
for(i of s){console.log(i);}    // 2 3 5 6

set 함 수 는 하나의 배열 이나 클래스 배열 대상 을 매개 변수 로 받 아들 여 초기 화 에 사용 합 니 다.
var set = new Set([1,2,3]);
console.log([...set]);  // [1, 2, 3]
console.log(set.size);  // 3
console.log(set);   // Set(3) {1, 2, 3}

Set 에 값 을 추가 할 때 형식 변환 이 일어나 지 않 습 니 다.set 내부 에서 두 값 이 같은 지 판단 하 는 알고리즘 은 = = 과 유사 하 다. 즉, 두 대상 은 항상 같 지 않 고 유일한 예 외 는 NaN 이 자신 과 같다 는 것 이다.
var set = new Set();
set.add({});
console.log(set.size);  // 1
set.add({});
console.log(set.size);  // 2(            ,           )

var a = new Set();
a.add(1);
console.log(a.size);    // 1
a.add(1);
console.log(a.size);    // 1(    1      ,  1===1,  set          )
a.add(2);
console.log(a.size);    // 2

2: Set 실례 의 속성Set.prototype.constructor: 구조 함수, 기본 값 은 Set 함수 입 니 다.Set.prototype.size: Set 인 스 턴 스 의 구성원 총 수 를 되 돌려 줍 니 다.
3. Set 인 스 턴 스 방법
add (value) - 값 추가, 세트 자 체 를 되 돌려 줍 니 다.
delete (value) - 값 을 삭제 하고 불 값 을 되 돌려 줍 니 다.
has (vaalue) - 값 이 있 는 지, 불 값 을 되 돌려 줍 니 다.
clear () - 모든 구성원 을 지 웁 니 다. 반환 값 이 없습니다.
var set = new Set();
set.add(1);
console.log(set.size);  // 1
console.log([...set]);  // [1]
console.log(set);   // Set(1) {1}
set.add(2).add(2);
console.log(set.size);  // 2,  2         

console.log(set.has(2));    // true
console.log(set.has(3));    // false
console.log(set.delete(1)); // true
console.log(set.has(1));    // false

작은 예
Array. from () 은 set 구 조 를 배열 로 바 꿀 수 있 습 니 다.
var items = new Set([1,2,4]);
console.log(items); // Set(3) {1, 2, 4}
var array = Array.from(items)
console.log(array); // [1,2,4]

용도: 배열 제거
var items = new Set([1,2,4,3,2,1]);
console.log(items); // Set(3) {1, 2, 4, 3}
var array = Array.from(items)
console.log(array); // [1,2,4,3]


function dedupe(array){
    return Array.from(new Set(array))
}
console.log(dedupe([1,4,2,4,1,3,5]));   // [1, 4, 2, 3, 5]

다섯: 옮 겨 다 니 기 동작
네 가지 옮 겨 다 니 는 방법 은 Set 구조 구성원 을 옮 겨 다 니 는 데 사용 된다.
1. keys (): 키 의 이동
2. values (): 값 의 이동
3. entries (): 키 가 맞 는 옮 겨 다 니 기
4. foreach (): 리 셋 함 수 를 사용 하여 각 멤버 를 옮 겨 다 니 기
앞의 세 사람 이 돌아 오 는 것 은 모두 옮 겨 다 니 는 대상 이 고 key 와 value 는 하나의 값 이기 때문에 앞의 두 사람 이 돌아 오 는 값 은 똑 같 습 니 다.
let set = new Set([1,2,4,6,3]);
console.log(set.keys());    // SetIterator {1, 2, 4, 6, 3}
for(let items of set.keys()){
    console.log(items); // 1 2 4 6 3
}

console.log(set.values());  // SetIterator {1, 2, 4, 6, 3}
console.log(set.entries()); // SetIterator {[1, 1], [2, 2], [4, 4], [6, 6], [3, 3]}
//   entries          ,        

set 구조의 인 스 턴 스 는 기본적으로 옮 겨 다 닐 수 있 습 니 다. 기본 옮 겨 다 니 기 생 성 함수 가 바로 values 방법 입 니 다.
values 방법 을 생략 하고 for of 방법 으로 set 를 직접 옮 겨 다 닐 수 있 습 니 다. (둘 은 같은 옮 겨 다 니 는 결 과 를 얻 었 습 니 다)
let set = new Set([1,2,4,6,3]);
for(x of set){
    console.log(x); // 1 2 4 6 3
}

확장 연산 자 내 부 는 for of 순환 을 사용 하기 때문에 set 구조 에 도 사용 할 수 있 습 니 다.
let set = new Set([2,5,12,3,2,3]);
let arr = [...set]
console.log(arr);   // [2, 5, 12, 3],     

배열 의 map 와 filter 방법 도 set 방법 (p154) 에 사용 할 수 있 습 니 다.
Weak Set - 중복 되 지 않 는 집합 이기 도 합 니 다.
WeakSet 과 Set 의 차이
1. WeakSet 의 멤버 는 대상 일 뿐 다른 유형의 값 이 아 닙 니 다.
2. WeakSet 의 대상 은 모두 약 한 인용 입 니 다.쓰레기 수 거 메커니즘 은 위 크 셋 이 대상 에 대한 인용 을 고려 하지 않 는 다 는 것 이다.다른 대상 이 이 대상 을 인용 하지 않 으 면 쓰레기 회수 체 제 는 이 대상 이 사용 하 는 메모 리 를 자동 으로 회수 하고 이 대상 이 weakset 에 존재 하 는 것 을 고려 하지 않 는 다 는 것 이다.이 특징 은 WeakSet 의 멤버 를 인용 할 수 없다 는 것 을 의미한다.따라서 Weak Set 는 옮 겨 다 닐 수 없다.
var ws = new WeakSet(); // WeakSet     ,   new    WeakSet    
ws.add(1);  // error
ws.add(Symbol());   // error

var obj = {};
ws.add(obj);    //   

위 예 설명: WeakSet 은 대상 형식의 구성원 만 추가 할 수 있 습 니 다.
Weak Set (실제 iterable 인 터 페 이 스 를 갖 춘 대상 은 Weak Set 의 매개 변수 로 사용 할 수 있 습 니 다) 이 배열 의 모든 구성원 은 자동 으로 Weak Set 인 스 턴 스 대상 의 구성원 이 됩 니 다.
var a = [[1,2],[3,4]];
var ws = new WeakSet(a);
console.log(ws);    // WeakSet {[3, 4], [1, 2]}
console.log(ws.size);   // undefined,    size  ,        

여기: size 속성 이 없어 서 옮 겨 다 닐 수 없습니다. 멤버 들 이 약 한 인용 이기 때문에 언제든지 사라 질 수 있 습 니 다. 옮 겨 다 니 는 체 제 는 멤버 의 존 재 를 보장 할 수 없습니다. 옮 겨 다 니 기 가 끝나 자마자 멤버 들 이 찾 지 못 할 수도 있 습 니 다.
WeakSet 의 용도: DOM 노드 를 저장 합 니 다. 이 노드 가 문서 에서 제거 되 었 을 때 메모리 유출 을 걱정 하지 않 아 도 됩 니 다.
세 가지 방법
1. WeakSet.prototype.add(value)
2. WeakSet.prototype.delete(value)
3. WeakSet.prototype.has(value)

좋은 웹페이지 즐겨찾기