반응형
리스트 순회하기
기존의 리스트 순회 방식
for i++
es6에 새롭게 등장한 리스트 순회 방법
for of
자바스크립트의 내장값 Array / Set / Map
Array, map, set은 자바스크립트 내장객체로서 이터러블, 이터레이터 브로토콜을 따른다.
[ Symbol.iterator ]
* 이터러블
-> 이터레이터를 리턴하는 [ Symbol.iterotor]( )를 가진 값, 즉 [Symbol.iterator]()을 실행 시 이터레이터를 반환하는 값.
* 이터레이터
-> { value , done} 객체를 리턴하는 next()를 가진 값.
* 이터러블/이터레이터 프로토콜
-> 이터러블을 for...of, 전개 연산자 등과 함께 동작하도록 한 규약
1) Array를 통한 접근
// Symbol.iterator
// es6에서 추가된 것으로, 어떤 객체의 키로써 사용될 수 있다.
// ex)
log(arr[Symbol.iterator])
// 출력값 : ƒ values() { [native code] }
log(set[Symbol.iterator])
log(map[Symbol.iterator])
** map과 set이란?
** set과 map은 기본적으로 index를 통한 접근이 불가능한다. ex) set[0] 또는 map[0] 등을 출력시 undefined를 출력한다.
2) Set을 통한 접근
3) Map을 통한 접근
총 코드
<script>
const log = console.log;
</script>
# Array를 통한 접근
<script>
const arr = [1,2,3];
for (const a of arr ) {
log(a)
}
</script>
# Set을 통한 접근
<script>
const set = new Set([1,2,3]);
for (const a of set ) {
log(a)
}
</script>
# Map을 통한 접근
<script>
const map = new Map([['a',1],['b',2],['c',3]]);
for (const a of map ) {
log(a)
}
</script>
# Symbol.iterator
es6에서 추가된 것으로, 어떤 객체의 키로써 사용될 수 있다.
ex)
<script>
//
log(arr[Symbol.iterator]())
//
log(set[Symbol.iterator]())
const setIter = set[Symbol.iterator]();
log(setIter.next()); // value: 1, done: false}
log(setIter.next()); // {value: 2, done: false}
log(setIter.next()); // {value: 3, done: false}
log(setIter.next()); // {value: undefined, done: true}
//
log(map[Symbol.iterator]())
const mapIter = map[Symbol.iterator]();
log(mapIter.next()); // {value: Array(2), done: false} // ['a', 1]
log(mapIter.next().value) //['b', 2]
log(mapIter.next()); // {value: Array(2), done: false} // ['c', 3]
log(mapIter.next()); // {value: undefined, done: true}
let iter1 = arr[Symbol.iterator]();
iter1.next();
for(const a of iter1) {
log(a);
}
// 2
// 3
let iter2 = set[Symbol.iterator]();
iter2.next();
for(const a of iter2) {
log(a);
}
// 2
// 3
let iter3 = map[Symbol.iterator]();
iter3.next();
for(const a of iter3) {
log(a);
}
// ['b', 2]
// ['b', 3]
const map2 = new Map([['a',1],['b',2],['c',3]]);
for(const a of map.keys()) log(a);
for(const a of map.values()) log(a);
for(const a of map.entries()) log(a);
</script>
<script>
log(map.keys()); // MapIterator {'a', 'b', 'c'}
log(map.values()); // MapIterator {1, 2, 3}
log(map.entries()); // MapIterator {'a' => 1, 'b' => 2, 'c' => 3}
log(map.forEach((value, key)=>{
log(`value : ${value} / key : ${key}`)
}))
// value : 1 / key : a
// value : 2 / key : b
// value : 3 / key : c
log(map.get('a')); // 1
log(map.has('a')); // true
log(map.set('d', 4)); // Map(4) {'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4}
log(map.clear()); // undefined
log(map.keys()); // MapIterator {}
</script>
[ 출처 ]
https://www.inflearn.com/course/functional-es6
반응형
'Javascript > etc' 카테고리의 다른 글
[ Javascript ] - 이터레이터(iterator) / 제너레이터(generator) (0) | 2022.09.20 |
---|---|
[ Javascript ] - map과 set (0) | 2022.09.20 |
[ Javascript ] - 함수 고급 개념 (0) | 2022.09.19 |
[ Javascript ] - 화살표함수와 일반함수 (0) | 2022.09.19 |
[ Javascript ] - 함수선언식과 함수표현식 (0) | 2022.09.19 |