키가 지정된 컬렉션

객체 리터럴을 사용하여 키-값 쌍을 저장하고 배열을 사용하여 저장할 수 있습니다. 반복 가능한 값 컬렉션입니다. ES6는 또한 특수 데이터 구조를 도입하여 키-값 쌍을 매핑하고 개별 값을 설정할 수 있습니다

지도

맵은 정보를 키-값 쌍으로 저장하는 반복 가능한 데이터 구조입니다. 객체 리터럴과 유사합니다 객체 리터럴과 달리 맵은 두 값을 모두 허용합니다. 및 키를 사용하고 순서 요소가 지도에 추가되는 것은 보존할 수 있습니다

지도를 만들려면 Map() 생성자를 사용합니다.

const myMap = new Map();

myMap;
> Map(0)

배열 (또는 모든 iterator 객체) 두 개의 요소로 구성된 배열과 같은 객체입니다. 이러한 각각의 첫 번째 요소는 요소가 2개인 데이터 구조가 키가 되고 두 번째 요소가 값이 됩니다. 해당 키에 연결됩니다. 가장 간단한 형태는 사실상 각 요소는 그 자체가 키와 값에 추가됩니다.

const myMap = new Map([
    [ "myKey", "A string value" ],
    [ "mySecondKey", 500 ],
    [ "myThirdKey", true ]
]);

myMap;
> Map(3) {'myKey' => 'A string value', 'mySecondKey' => 500, 'myThirdKey' => true}

다시 말하지만 Map 객체는 두 값 모두 는 모든 데이터 유형과 값을 사용할 수 있습니다.

const notAFunction = () => console.log( "function" );
const myMap = new Map([
  [ null, 0 ],
  [ false, "This is false" ],
  [ undefined, "No defined value" ],
  [ NaN, "Not a number" ]
]);

myMap;
> Map(4) {null => 0, false => 'This is false', undefined => 'No defined value', NaN => 'Not a number'}

지도 요소를 가져오거나 설정 또는 삭제하려면 Map에서 상속된 메서드를 사용합니다. 생성자입니다.

const myMap = new Map();

myMap;
> Map(0)

myMap.set( "myKey", "My value." );

myMap.has( "myKey" );
> true

myMap.get( "myKey" );
"My value."

myMap.delete( "myKey" );

myMap;
> Map(0)

지도의 키는 고유합니다. 즉, 동일한 키를 설정하면 키-값 쌍:

const myMap = new Map([ [ "myKey", "A string value" ] ]);

myMap.set( "myKey", 500 );

myMap;
> Map(1) {'myKey' => 500}

객체와 마찬가지로 const 및 지도를 수정합니다. 그러나 const의 다른 사용 사례와 마찬가지로 변수 자체를 변경하거나 삭제합니다.

const myMap = new Map();
myMap.set( "myKey", "A string value" );

myMap;
> Map(1) {'myKey' => 500}

WeakMap

WeakMap은 '약한' 상태를 보유하고 있는 지도입니다. 참조, 객체 또는 기호에 대한 참조여야 함 전역 기호 레지스트리에 추가되지 않은 값을 반환합니다.

WeakMap을 만들려면 WeakMap() 생성자를 사용합니다.

const myWeakMap = new WeakMap();

myWeakMap;
> WeakMap(0)

WeakMap 구문은 Map과 유사하지만, WeakMaps는 그렇지 않습니다. 반복 가능하며 객체나 기호 이외의 값을 키로 사용하면 구문 오류가 발생합니다. '아니요'인 경우 키에 대한 참조가 있는지 해당 객체 또는 기호 및 WeakMap, 둘 다 가비지 컬렉션에 사용할 수 있습니다.

따라서 객체와 연결된 메타데이터를 객체에 대한 참조를 키로 사용하는 WeakMap. 다른 참조가 없는 경우 객체가 메모리에서 제거되면 연결된 메타데이터도 삭제됩니다

세트

세트는 배열과 다소 비슷하지만 반복 가능한 고유한 값의 모음입니다. 그러나 Set은 고유한 값만 포함할 수 있습니다. 지도에서와 마찬가지로 집합은 요소가 추가된 순서를 유지합니다.

Set을 만들려면 Set() 생성자를 사용합니다.

const mySet = new Set();

mySet;
> Set []

배열 리터럴에서 Set을 만들 수도 있습니다.

const mySet = new Set([ 1, 2, 3 ]);

mySet;
> Set(3) [ 1, 2, 3 ]

세트는 중복 요소를 허용하지 않으므로 배열에서 동일한 값의 인스턴스를 여러 개 포함하는 경우 첫 번째 다음과 같습니다.

const mySet = new Set([ 1, 2, 3, 2 ]);

mySet;
> Set(3) [ 1, 2, 3 ]

Set에서 요소를 추가하거나 삭제하려면 Set에서 상속된 메서드를 사용하세요. 생성자에 전달해야 합니다. 이러한 메서드는 요소 값을 기반으로 요소에 대해 작동합니다. 색인 자체를 참조하는 대신 다음을 수행합니다.

const mySet = new Set();

mySet.add( "My value." );

mySet;
> Set [ "My value." ]

mySet.has( "My value." );
> true

mySet.delete( "My value." );

mySet;
> Set []

세트는 색인이 생성된 컬렉션은 아니지만 따라서 세트의 요소는 반복됩니다. 삽입해야 합니다. 세트에 중복된 요소 값을 추가하려고 하면 건너뜀, 원래 게재 신청서 유지:

const mySet = new Set([ 1, 2, 3 ]);

mySet;
> Set(3) [ 1, 2, 3 ]

mySet.add( 2 );
> Set(3) [ 1, 2, 3 ]

세트에서 배열을 만들려면 Array.from() 메서드를 사용하거나 이를 펼칩니다. 구문:

const mySet = new Set([ 1, 2, 3 ]);
const myArray = Array.from( mySet );

myArray;
> Array(3) [ 1, 2, 3 ]

[ ...mySet ];
> Array(3) [ 1, 2, 3 ]

WeakSet

WeakSet는 가비지 수집 가능한 값만 포함하는 세트입니다. 예를 들어 객체에 대한 참조나 기호를 전역 기호 레지스트리에 추가되지 않은 값을 반환합니다.

WeakSet를 만들려면 WeakSet() 생성자를 사용합니다.

const myWeakSet = new WeakSet();

myWeakSet;
> WeakSet []

WeakSet 구문은 Set과 비슷하지만, WeakSet는 반복 가능하며 객체나 기호 이외의 값을 사용하면 구문 오류가 발생합니다. WeakMap과 마찬가지로 다른 참조가 없는 경우 WeakSet에서 참조한 값이 있는 경우 해당 값은 가비지 컬렉션입니다.

이렇게 하면 반복 가능한 단일 컬렉션을 집계하는 등의 사용 사례가 관련 객체입니다. 에서 참조하는 객체에 대한 다른 참조가 없는 경우 WeakSet를 사용하면 관련 요소도 WeakSet에서 삭제됩니다.

이해도 확인

다음과 같은 경우를 가정하겠습니다.

        const myMap = new Map([ [ "myKey", "My string" ] ]);
        myMap.set( "myKey", 100 );
      

myMap는 무엇을 반환하나요?

100
"My string"
undefined