ES6 set (전재)
ES6 는 새로운 데이터 구조 Set 을 제공 합 니 다.그것 은 배열 과 유사 하지만 구성원 의 값 은 모두 유일 하 며 중복 되 는 값 이 없다.
set 자 체 는 set 데이터 구 조 를 만 드 는 구조 함수 입 니 다.
const s = new Set();
[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));
for (let i of s) {
console.log(i);
}
// 2 3 5 4
위의 코드 는 add 방법 을 통 해 set 구조 에 구성원 을 추가 한 결과 set 구조 에 중복 되 는 값 을 추가 하지 않 음 을 나타 낸다.
set 함 수 는 하나의 배열 (또는 iterable 인터페이스 가 있 는 다른 데이터 구조) 을 매개 변수 로 받 아들 여 초기 화 할 수 있 습 니 다.
//
const set = new Set([1, 2, 3, 4, 4]);
[...set]
// [1, 2, 3, 4]
//
const items = new Set([1, 2, 3, 4, 5, 5, 5, 5]);
items.size // 5
//
function divs () {
return [...document.querySelectorAll('div')];
}
const set = new Set(divs());
set.size // 56
//
divs().forEach(div => set.add(div));
set.size // 56
위의 코드 에서 예 1 과 예 2 는 모두 set 함수 가 배열 을 매개 변수 로 받 아들 이 고 예 3 은 유사 한 배열 의 대상 을 매개 변수 로 받 아들 이 는 것 이다.
위의 코드 에서 도 배열 의 중복 멤버 를 제거 하 는 방법 을 보 여 주 었 다.
//
[...new Set(array)]
Set 에 값 을 넣 을 때 유형 전환 이 일어나 지 않 기 때문에 5 와 '5' 는 서로 다른 값 입 니 다.Set 내부 에서 두 값 이 다른 지 여 부 를 판단 할 때 사용 하 는 알고리즘 을 'Same - value equality' 라 고 하 는데 이것 은 정확 한 연산 자 (= = =) 와 유사 하 며 주요 한 차이 점 은 NaN 이 자신 과 같 지 않 고 정확 한 연산 자 는 NaN 이 자신 과 같 지 않다 고 여 긴 다.
let set = new Set();
let a = NaN;
let b = NaN;
set.add(a);
set.add(b);
set // Set {NaN}
위의 코드 는 Set 인 스 턴 스 에 NaN 두 개 를 추 가 했 지만 하나 만 추가 할 수 있 습 니 다.이 는 Set 내부 에서 두 NaN 이 동일 하 다 는 것 을 보 여 준다.
또 두 상 대 는 항상 같 지 않다.
let set = new Set();
set.add({});
set.size // 1
set.add({});
set.size // 2
위의 코드 는 두 개의 빈 대상 이 같 지 않 기 때문에 두 개의 값 으로 간주 된다 는 것 을 나타 낸다.
Set 실례 의 속성 과 방법
set 구조의 인 스 턴 스 는 다음 과 같은 속성 이 있 습 니 다.
Set.prototype.constructor: , Set 。
Set.prototype.size: Set 。
Set 실례 의 방법 은 두 가지 로 나 뉜 다. 조작 방법 (조작 데이터 에 사용) 과 옮 겨 다 니 는 방법 (구성원 옮 겨 다 니 는 데 사용) 이다.다음은 먼저 네 가지 조작 방법 을 소개 한다.
add(value): , Set 。
delete(value): , , 。
has(value): , Set 。
clear(): , 。
위의 이러한 속성 과 방법의 실례 는 다음 과 같다.
s.add(1).add(2).add(2);
// 2
s.size // 2
s.has(1) // true
s.has(2) // true
s.has(3) // false
s.delete(2);
s.has(2) // false
다음은 하나의 키 를 포함 하 는 지 판단 하 는 데 있어 서 Object 구조 와 Set 구조의 서법 이 다르다.
//
const properties = {
'width': 1,
'height': 1
};
if (properties[someName]) {
// do something
}
// Set
const properties = new Set();
properties.add('width');
properties.add('height');
if (properties.has(someName)) {
// do something
}
Array. from 방법 은 Set 구 조 를 배열 로 바 꿀 수 있 습 니 다.
const items = new Set([1, 2, 3, 4, 5]);
const array = Array.from(items);
이 는 배열 의 중복 멤버 를 제거 하 는 또 다른 방법 을 제공 했다.
function dedupe(array) {
return Array.from(new Set(array));
}
dedupe([1, 1, 2, 3]) // [1, 2, 3]
반복 작업
set 구조의 인 스 턴 스 는 네 가지 옮 겨 다 니 는 방법 이 있 습 니 다. 구성원 을 옮 겨 다 니 는 데 사용 할 수 있 습 니 다.
keys():
values():
entries():
forEach():
특히 set 의 옮 겨 다 니 는 순 서 는 삽입 순서 라 는 점 을 지적 해 야 한다.이 기능 은 때때로 매우 유용 합 니 다. 예 를 들 어 set 를 사용 하여 리 셋 함수 목록 을 저장 하고 호출 할 때 추가 순서에 따라 호출 할 수 있 습 니 다.
(1)keys(),values(),entries()
keys 방법, values 방법, entries 방법 은 모두 옮 겨 다 니 는 대상 을 되 돌려 줍 니 다.Set 구조 에 키 이름 이 없 기 때문에 키 값 (또는 키 이름과 키 값 이 같은 값) 만 있 기 때문에 keys 방법 과 values 방법의 행동 은 완전히 일치 합 니 다. \ # \ # \ #편력 조작 술부
set 구조의 인 스 턴 스 는 네 가지 옮 겨 다 니 는 방법 이 있 습 니 다. 구성원 을 옮 겨 다 니 는 데 사용 할 수 있 습 니 다.
keys()
: 키 이름 을 되 돌려 주 는 달력 values()
: 키 값 을 되 돌려 주 는 달력 entries()
: 키 값 이 맞 는 스 트 리밍 기 를 되 돌려 줍 니 다 forEach()
: 리 셋 함 수 를 사용 하여 각 구성원 을 옮 겨 다 니 기 Set
의 옮 겨 다 니 는 순서 가 삽입 순서 라 는 점 을 지적 해 야 한다.이 기능 은 때때로 매우 유용 합 니 다. 예 를 들 어 set 를 사용 하여 리 셋 함수 목록 을 저장 하고 호출 할 때 추가 순서에 따라 호출 할 수 있 습 니 다.(1)
keys()
, values()
, entries()
keys
방법, values
방법, entries
방법 은 모두 옮 겨 다 니 는 대상 (상세 한 내용 은 장 참조) 이다.set 구조 에 키 이름 이 없 기 때문에 키 값 (또는 키 이름과 키 값 이 같은 값) 만 있 기 때문에 keys
방법 과 values
방법의 행동 이 완전히 일치 합 니 다.let set = new Set(['red', 'green', 'blue']);
for (let item of set.keys()) {
console.log(item);
}
// red
// green
// blue
for (let item of set.values()) {
console.log(item);
}
// red
// green
// blue
for (let item of set.entries()) {
console.log(item);
}
// ["red", "red"]
// ["green", "green"]
// ["blue", "blue"]
위의 코드 에서 entries 방법 이 되 돌아 오 는 스 트 리밍 기 는 키 이름과 키 값 을 포함 하기 때문에 매번 하나의 배열 을 출력 할 때마다 두 멤버 는 완전히 같 습 니 다.
set 구조의 인 스 턴 스 는 기본적으로 옮 겨 다 닐 수 있 습 니 다. 기본 옮 겨 다 니 기 생 성 함수 가 바로 values 방법 입 니 다.
Set.prototype[Symbol.iterator] === Set.prototype.values
// true
이것 은 values 방법 을 생략 하고 for... of 순환 으로 Set 를 옮 겨 다 닐 수 있 음 을 의미 합 니 다.
let set = new Set(['red', 'green', 'blue']);
for (let x of set) {
console.log(x);
}
// red
// green
// blue
(2)forEach()
set 구조의 인 스 턴 스 는 배열 과 마찬가지 로 foreach 방법 도 있 습 니 다. 모든 구성원 에 게 특정한 조작 을 수행 하고 값 을 되 돌려 주지 않 습 니 다.
set = new Set([1, 4, 9]);
set.forEach((value, key) => console.log(key + ' : ' + value))
// 1 : 1
// 4 : 4
// 9 : 9
위의 코드 는 foreach 방법의 매개 변 수 는 처리 함수 라 는 것 을 설명 합 니 다.이 함수 의 매개 변 수 는 배열 의 foreach 와 일치 하 며, 키 값, 키 이름, 집합 자체 (상례 에서 이 매개 변 수 를 생략 하 였 습 니 다) 입 니 다.여기 서 주의해 야 할 것 은 Set 구조의 키 이름 은 키 값 (둘 은 같은 값) 이기 때문에 첫 번 째 매개 변 수 는 두 번 째 매개 변수의 값 과 영원히 같 습 니 다.
또한, foreach 방법 은 두 번 째 매개 변 수 를 가지 고 바 인 딩 처리 함수 내부 의 this 대상 을 표시 할 수 있 습 니 다.
(3) 옮 겨 다 니 는 응용
확장 연산 자 (...) 내 부 는 for... of 순환 을 사용 하기 때문에 set 구조 에 도 사용 할 수 있 습 니 다.
let set = new Set(['red', 'green', 'blue']);
let arr = [...set];
// ['red', 'green', 'blue']
확장 연산 자 와 set 구 조 를 결합 하면 배열 의 중복 구성원 을 제거 할 수 있다.
let arr = [3, 5, 2, 2, 5, 5];
let unique = [...new Set(arr)];
// [3, 5, 2]
그리고 배열 의 map 와 filter 방법 도 set 에 간접 적 으로 사용 할 수 있다.
let set = new Set([1, 2, 3]);
set = new Set([...set].map(x => x * 2));
// Set :{2, 4, 6}
let set = new Set([1, 2, 3, 4, 5]);
set = new Set([...set].filter(x => (x % 2) == 0));
// Set :{2, 4}
따라서 set 를 사용 하면 집합 (Union), 교 집합 (Intersect), 차 집합 (Difference) 을 쉽게 실현 할 수 있다.
let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
//
let union = new Set([...a, ...b]);
// Set {1, 2, 3, 4}
//
let intersect = new Set([...a].filter(x => b.has(x)));
// set {2, 3}
//
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1}
옮 겨 다 니 면서 원래 의 Set 구 조 를 동시에 바 꾸 려 면 현재 직접적인 방법 은 없 지만 두 가지 변통 방법 이 있다.하 나 는 원 Set 구 조 를 이용 하여 새로운 구 조 를 매 핑 한 다음 에 원래 의 Set 구조 에 값 을 부여 하 는 것 이다.다른 하 나 는 Array. from 방법 을 이용 하 는 것 이다.
//
let set = new Set([1, 2, 3]);
set = new Set([...set].map(val => val * 2));
// set 2, 4, 6
//
let set = new Set([1, 2, 3]);
set = new Set(Array.from(set, val => val * 2));
// set 2, 4, 6
위의 코드 는 두 가지 방법 을 제공 하여 옮 겨 다 니 는 작업 에서 원래 의 Set 구 조 를 직접 바 꾸 었 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.