수색…


소개

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


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow