Set
배열과 비슷한데, 중복을 허용하지 않는다.
- 어떤 데이터가 자신의 멤버인지 빠르게 확인할 수 있다. (mySet.has("데이터"))
- 인덱스 값으로 데이터를 조회할 수 없다. (mySet[0] → undefined)
- map, filter, some, every 내장함수 미구현
- mySet.addAll, mySet.removeall 미구현
var mySet = new Set()
var mySet = new Set([1, 2, 3])
var myArr = Array.from(mySet) // [1, 2, 3]
[...mySet] // [1, 2, 3]
mySet.add(1).add(2).add(3)
mySet.add( 객체 )
mySet.delete(1).delete(2)
mySet.clear
mySet.size
mySet.has("값") - string일 경우 대소문자 구별O
Set에 추가한 순서 = 순회하는 순서
mySet.keys() - 삽입 순으로 Set 객체 내 각 요소에 대한 값을 포함하는 새로운 Iterator 객체를 반환
= mySet.values()
mySet.entries() - 삽입 순으로 Set 객체 내 각 값에 대한 [value, value] 배열을 포함하는 새로운 Iterator 객체를 반환
mySet [symbol.iterator]
mySet.forEach( value, value2, Set ) ※ value = value2
cf) myArray.forEach( 값, 인덱스, 배열 )
mySet.forEach( v => { console.log(v) } )
1
2
3
mySet.forEach(( value1, value2, setObject ) => console.log( value1 + ', ' + value2 ));
1, 1
2, 2
3, 3
for ( var i of mySet ) console.log(i)
= for ( var i of mySet ) {
console.log (i);
}
1
2
3
교집합 var intersection = new Set([...set1].filter(x => set2.has(x)));
차집합 var difference = new Set([...set1].filter(x => !set2.has(x)));
Map
객체와 비슷하다. 키와 값을 연결한다.
※ 객체의 단점
- 객체 안에 키-값이 몇 개인지 쉽게 알아내기 힘들다. (size, length가 없다.)
- 객체를 키로 써서 값과 연결할 수 없다. (키는 반드시 심볼/문자열이어야 한다.)
- 프로퍼티 순서를 보장하지 않는다.
- 트로토타입 체인 때문에 의도하지 않은 연결이 생길 수 있다.
- 객체의 키로 내장 메소드의 이름을 사용하면 충돌이 생길 수 잇다.
- iterate할 수 없다. (for..of나 ...를 사용할 수 없다.) ★
Object를 iterate하려면 먼저 모든 키를 알아낸 후, 그 키의 배열을 iterate해야 한다.
ES6 컬렉션이 데이터와 내장 메소드 이름 사이의 충돌을 피하기 위해 설계되었기 때문에,
ES6 컬렉션은 자신의 멤버 데이터를 드러내기 위해 속성(property)을 사용하지 않는다.
→ obj.key (X) obj [key] (X) map.get(key) (O)
var myMap = new Map()
var myMap = new Map(pairs)
myMap.set( 'a', 'apple' );
myMap.set( 'b', 'banana' );
myMap.set( '객체1', '객체2' );
myMap.delete( 'a' )
myMap.clear()
myMap.size
myMap.has( 'a' ) // true
myMap.get( 'a' ); // 'apple'
myMap.keys
myMap.values
※ NaN도 키로서 사용할 수 있다.
∵ 모든 NaN은 자기 자신과 동일하지 않지만(NaN !== NaN), NaN을 서로 구분할 수도 없기 때문
Map에 추가한 순서 = 순회하는 순서
myMap.keys() - Map 객체 안의 모든 키(Key)들을 집어넣은 순서대로 가지고 있는 Iterator 객체를 반환
myMap.values() - Map 객체 안의 모든 값(Value)들을 집어넣은 순서대로 가지고 있는 Iterator 객체를 반환
myMap.entries() - Map 객체 안의 모든 요소들을 [key, value] 형태의 array 로 집어넣은 순서대로 가지고 있는 Iterator 객체를 반환
myMap [symbol.iterator]
myMap.forEach( v => { console.log(v) } )
apple, banana
myMap.forEach(value, key) => {
console.log( key + ' = ' + value );
});
a = apple
b = banana
for ( var i of mySet ) { console.log(i) }
[ 'a', 'apple' ]
[ 'b', 'banana' ]
for ( var [key, value] of myMap) {
console.log( key + ' = ' + value )
}
a = apple
b = banana
for (let [key, value] of myMap.entries()) {
console.log( key + ' = ' + value )
}
a = apple
b = banana
for (let key of myMap.keys()) {
console.log(key)
}
a
b
for (let value of myMap.values()) {
console.log(value)
}
apple
banana
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Set
Set
Set 객체는 자료형에 관계 없이 원시 값과 객체 참조 모두 유일한 값을 저장할 수 있습니다.
developer.mozilla.org
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Map
Map
Map 객체는 키-값 쌍을 저장하며 각 쌍의 삽입 순서도 기억하는 콜렉션입니다.
developer.mozilla.org
https://velog.io/@yesdoing/JavaScript-Collections
JavaScript Collections
Collections 프로그래밍 언어에서 Collection 이란 단어는 '프로그래밍 언어가 제공하는 값을 담을 수 있는 컨테이너' 라고 생각합니다. 메이저 프로그래밍 언어에는 여러가지 데이터 컬렉션들이 존재
velog.io
https://www.yceffort.kr/2019/07/18/javascript-map-weakmap/
Javascript Set 그리고 Map
welcome to yceffort's blog
www.yceffort.kr
forEach, for in, for of 특징 및 성능 비교
한 번은 정리하고 싶던 글이였습니다. 배열, 객체, map, set에 대해 위에 쓴 forEach, for in, for of가 어떻게 동작하는지 살펴보겠습니다.
medium.com
https://www.yceffort.kr/2019/07/18/javascript-map-weakmap/
Javascript Set 그리고 Map
welcome to yceffort's blog
www.yceffort.kr
'공부_정리☆★' 카테고리의 다른 글
정리_JavaScript - 루프와 반복 - label, break, return, continue (0) | 2020.06.26 |
---|---|
정리_정규표현식 (2) | 2020.06.26 |
정리_JavaScript/Traversy - Higher Order Functions & Arrays (0) | 2020.06.23 |
정리_JavaScript/유튜브 fcc - 2. ES6_1차 정리 (0) | 2020.06.22 |
정리_JavaScript/유튜브 fcc - 1. JavaScript_2차 정리 (0) | 2020.06.17 |
댓글