세트 는 이제 ES2015 (일명 ES6, 즉 ECMAScript 6)에서 사용할 수 있습니다. ES6는 2015 년 6 월부터 JavaScript의 현재 표준이었습니다.
ECMAScript 6에는 임의의 값에 대해 작동하는 데이터 구조 세트가 있으며, 빠르며 NaN을 올바르게 처리합니다. - 악셀 Rauschmayer , 탐색 ES6
Axel Rauschmayer의 저서 Exploring ES6 에서 처음 두 가지 예 :
단일 요소 관리 :
> let set = new Set();
> set.add('red')
> set.has('red')
true
> set.delete('red')
true
> set.has('red')
false
세트의 크기 결정 및 지우기 :
> let set = new Set();
> set.add('red')
> set.add('green')
> set.size
2
> set.clear();
> set.size
0
JavaScript의 세트에 대해 자세히 알아 보려면 Exploring ES6를 확인하십시오 . 이 책은 온라인에서 무료로 읽을 수 있지만 저자 Axel Rauschmayer 박사 를 지원하고 싶다면 약 $ 30에 책을 구입할 수 있습니다.
이제 세트와 ES6을 사용하려면 Babel , ES6에서 ES5 로의 트랜스 파일러 및 해당 폴리 필을 사용할 수 있습니다 .
편집 : 2017 년 6 월 6 일 현재 대부분의 주요 브라우저는 최신 버전 (IE 11 제외)에서 전체 세트를 지원합니다. 즉, 이전 브라우저를 지원하지 않는 경우 바벨이 필요하지 않을 수 있습니다. 현재 브라우저를 포함하여 다른 브라우저에서 호환성을 확인하려면 Kangax의 ES6 호환성 표를 확인하십시오 .
편집하다:
초기화에 대한 설명입니다. 집합은 생성자에서 모든 동기 반복 가능 항목을 사용할 수 있습니다. 즉, 배열뿐만 아니라 문자열 및 반복자를 사용할 수 있습니다. 예를 들어 세트의 다음 배열 및 문자열 초기화를 사용하십시오.
const set1 = new Set(['a','a','b','b','c','c']);
console.log(...set1);
console.log(set1.size);
const set2 = new Set("aabbcc");
console.log(...set2);
console.log(set2.size);
배열과 문자열의 두 출력이 동일합니다. 참고 ...set1는 IS 확산 구문 . iterable의 각 요소가 세트에 하나씩 추가되는 것처럼 보이므로 배열과 문자열 모두 동일한 요소를 가지며 요소가 동일한 순서이기 때문에 세트가 동일하게 생성됩니다. 집합에 대해주의해야 할 또 다른 점은 집합을 반복 할 때 요소가 집합에 삽입 된 순서를 따른다는 것입니다. 다음은 세트를 반복하는 예입니다.
const set1 = new Set(['a','a','b','b','c','c']);
for(const element of set1) {
console.log(element);
}
이터 러블을 사용하여 집합을 초기화 할 수 있으므로 생성기 함수 에서 이터레이터를 사용할 수도 있습니다 . 다음은 동일한 출력을 생성하는 반복기 초기화의 두 가지 예입니다.
function* getLetters1 () {
yield 'a';
yield 'a';
yield 'b';
yield 'b';
yield 'c';
yield 'c';
}
function* getLetters2 (letters, repeatTimes) {
for(const letter of letters) {
for(let i = 0; i < repeatTimes; ++i) {
yield letter;
}
}
}
console.log("------ getLetters1 ------");
console.log(...getLetters1());
const set3 = new Set(getLetters1());
console.log(...set3);
console.log(set3.size);
console.log("------ getLetters2 ------");
console.log(...getLetters2('abc', 2));
const set4 = new Set(getLetters2('abc', 2));
console.log(...set4);
console.log(set4.size);
이 예제의 생성기 함수는 반복되지 않도록 작성 될 수 있지만 생성기 함수가 더 복잡하고 다음이 성능에 너무 부정적인 영향을 미치지 않는 한 Set 메서드를 사용하여 다음과 같은 생성기에서 값만 가져올 수 있습니다. 반복하지 마십시오.
Rauschmayer 박사의 책을 읽지 않고 세트에 대해 더 많이 알고 싶다면 Set 에서 MDN 문서를 확인할 수 있습니다 . MDN 또한 사용하는 등 일련의 반복보다 예 보유 forEach및 이용 .keys, .values및 .entries방법. MDN에는 또한 집합 집합, 교차 집합, 집합 차이, 대칭 집합 차이 및 집합 수퍼 집합 검사와 같은 예가 있습니다. 바라건대 이러한 작업의 대부분은이를 지원하는 자체 함수를 빌드 할 필요없이 JavaScript에서 사용할 수 있습니다. 사실, 제안이 4 단계에 도달 할 경우 향후 어느 시점에서 JavaScript의 Set에 다음 메서드를 추가해야하는 새로운 Set 메서드에 대한이 TC39 제안이 있습니다.
- Set.prototype.intersection (iterable)-set 교차 연산으로 새로운 Set 인스턴스를 생성합니다.
- Set.prototype.union (iterable)-set union 연산으로 새로운 Set 인스턴스를 생성합니다.
- Set.prototype.difference (iterable)-메서드는 iterable에 요소없이 새 Set을 만듭니다.
- Set.prototype.symmetricDifference (iterable)-this 또는 iterable에서만 찾은 요소 집합을 반환합니다.
- Set.prototype.isSubsetOf (반복 가능)
- Set.prototype.isDisjointFrom (반복 가능)
- Set.prototype.isSupersetOf (반복 가능)
'Tom' in set진실한 배열이 어떻게 보일 것으로 기대 하십니까? 그것은 당신이 뭔가 에 대해 잘못된 가정을 가지고있는 것 같습니다 . 그리고 나는 무엇에 대해 알아 내려고 노력 하고 있습니다.