수색…
소개
Set 객체를 사용하면 프리미티브 값이나 객체 참조와 상관없이 모든 유형의 고유 한 값을 저장할 수 있습니다.
집합 객체는 값의 모음입니다. 삽입 순서에 따라 요소의 요소를 반복 할 수 있습니다. 설정의 값은 한 번만 발생할 수 있습니다; Set의 컬렉션에서 고유합니다. 고유 한 값은 SameValueZero 비교 알고리즘을 사용하여 구별됩니다.
통사론
- 새 집합 ([iterable])
- mySet.add (value)
- mySet.clear ()
- mySet.delete (value)
- mySet.entries ()
- mySet.forEach (콜백 [, thisArg])
- mySet.has (값)
- mySet.values ()
매개 변수
매개 변수 | 세부 |
---|---|
반복 가능한 | 반복 가능한 객체가 전달되면 모든 요소가 새 Set에 추가됩니다. null는 미정 도리로서 처리됩니다. |
값 | Set 객체에 추가 할 요소의 값입니다. |
콜백 | 각 요소에 대해 실행할 함수입니다. |
thisArg | 선택 과목. 콜백을 실행할 때 this로 사용할 값입니다. |
비고
Set의 각 값은 고유해야하므로 등호 값이 확인되며 === 연산자에서 사용 된 알고리즘과 동일한 알고리즘을 기반으로하지 않습니다. 특히, Sets의 경우 +0 (정확히 -0)과 -0은 서로 다른 값입니다. 그러나 이것은 최신 ECMAScript 6 사양에서 변경되었습니다. Gecko 29.0 (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26) (버그 952870)부터 최근 야간 Chrome에서는 +0 및 -0이 Set 객체에서 동일한 값으로 처리됩니다. 또한 NaN 및 undefined는 Set에도 저장할 수 있습니다. NaN은 NaN과 동일하게 간주됩니다 (NaN! == NaN 임에도 불구하고).
세트 만들기
Set 객체를 사용하면 프리미티브 값이나 객체 참조와 상관없이 모든 유형의 고유 한 값을 저장할 수 있습니다.
항목을 집합으로 밀어 넣고 일반 JavaScript 배열과 유사하게 반복 할 수 있지만 배열과 달리 값이 이미있는 경우 집합에 값을 추가 할 수 없습니다.
새로운 세트를 생성하려면 :
const mySet = new Set();
또는 iterable 객체에서 세트를 만들어 값을 시작할 수 있습니다.
const arr = [1,2,3,4,4,5];
const mySet = new Set(arr);
위의 예에서 설정된 내용은 {1, 2, 3, 4, 5}
입니다. 값 4는 원래 생성 된 배열과 달리 한 번만 나타납니다.
세트에 값 추가
Set에 값을 추가하려면 .add()
메서드를 사용합니다.
mySet.add(5);
값이 이미 세트에 존재하면 세트에 고유 값이 있으므로 값을 다시 추가하지 않습니다.
.add()
메서드는 집합 자체를 반환하므로 추가 호출을 함께 연결할 수 있습니다.
mySet.add(1).add(2).add(3);
세트에서 값 제거하기
세트에서 값을 제거하려면 .delete()
메소드를 사용하십시오.
mySet.delete(some_val);
이 함수는 값이 집합에 존재하고 제거 되었으면 true
를 반환하고 그렇지 않으면 false
반환합니다.
집합에 값이 있는지 확인하기
지정된 값이 집합에 있는지 확인하려면 .has()
메서드를 사용합니다.
mySet.has(someVal);
someVal
가 세트에 있으면 true
반환 false
그렇지 않으면 false
반환합니다.
세트 지우기
.clear()
메서드를 사용하여 세트의 모든 요소를 제거 할 수 있습니다.
mySet.clear();
길이 설정하기
.size
속성을 사용하여 집합 안의 요소 수를 얻을 수 있습니다.
const mySet = new Set([1, 2, 2, 3]);
mySet.add(4);
mySet.size; // 4
이 속성은 Array.prototype.length
와 달리 읽기 전용이므로 무언가를 할당하여 변경할 수는 없습니다.
mySet.size = 5;
mySet.size; // 4
strict 모드에서는 오류가 발생합니다.
TypeError: Cannot set property size of #<Set> which has only a getter
집합을 배열로 변환
경우에 따라 집합을 배열로 변환해야 할 수도 있습니다. 예를 들어 .filter()
와 같은 Array.prototype
메서드를 사용할 수 있습니다. 이렇게하려면 Array.from()
또는 destructuring-assignment
.
var mySet = new Set([1, 2, 3, 4]);
//use Array.from
const myArray = Array.from(mySet);
//use destructuring-assignment
const myArray = [...mySet];
이제 짝수만을 포함하도록 배열을 필터링하고 Set 생성자를 사용하여 Set으로 다시 변환 할 수 있습니다.
mySet = new Set(myArray.filter(x => x % 2 === 0));
mySet
에는 이제 짝수 만 포함됩니다.
console.log(mySet); // Set {2, 4}
교차점과 집합의 차이
집합에서 교차 및 차이에 대한 빌드 인 메서드는 없지만이를 구현할 수는 있지만 배열로 변환하고 필터링 한 다음 Sets로 다시 변환합니다.
var set1 = new Set([1, 2, 3, 4]),
set2 = new Set([3, 4, 5, 6]);
const intersection = new Set(Array.from(set1).filter(x => set2.has(x)));//Set {3, 4}
const difference = new Set(Array.from(set1).filter(x => !set2.has(x))); //Set {1, 2}
반복 세트
간단한 for-loop를 사용하여 Set을 반복 할 수 있습니다.
const mySet = new Set([1, 2, 3]);
for (const value of mySet) {
console.log(value); // logs 1, 2 and 3
}
집합을 반복 할 때 항상 집합에 처음 추가 된 순서대로 값을 반환합니다. 예 :
const set = new Set([4, 5, 6])
set.add(10)
set.add(5) //5 already exists in the set
Array.from(set) //[4, 5, 6, 10]
또한 .forEach()
메서드가 있으며 Array.prototype.forEach()
와 비슷합니다. 이 두 파라미터를 갖는 callback
각 요소에 대해 실행되며, 옵션 thisArg
로 사용되며, this
실행할 때 callback
.
callback
에는 세 가지 인수가 있습니다. 처음 두 인수는 Set ( Array.prototype.forEach()
및 Map.prototype.forEach()
와의 일관성 유지를 위해 Set의 현재 요소이며 세 번째 인수는 Set 자체입니다.
mySet.forEach((value, value2, set) => console.log(value)); // logs 1, 2 and 3