[javascript] ES6+ 순회, 이터러블, 이터레이터, 전개 연산자

김효진·2021년 8월 7일
0
post-thumbnail

함수형 프로그래밍과 JavaScript ES6+ 강의를 듣고 정리한 내용입니다.

기존과 달라진 ES6에서의 리스트 순회

  • for i++
constlist= [1, 2, 3];
for (vari= 0;i<list.length;i++) {
log(list[i]);
}
conststr= 'abc'
for (vari= 0;i<str.length;i++) {
log(str[i]);
}
  • for of
for(const a oflist) {
log(a)
}
for(const a ofstr) {
log(a)
}
  • 결과
  • Array 순회
log('-------- Arr --------');
constarr= [1, 2, 3];
for (const a ofarr)log(a);
  • Set 순회
log('-------- Set --------');
constset= newSet([1, 2, 3]);
for (const a ofset)log(a);
  • Map 순회
log('-------- Map --------');
constmap= newMap([['a', 1], ['b', 2], ['c', 3]]);
for (const a ofmap)log(a);
  • 결과

Array는 값을 조회를 할 수 있다.

Set도 값을 조회할 수 있을까?

Set은 값을 조회할 수 없다.

이 말은, Array와 같이 for of 문이 생기지 않았다는 것을 의미한다.

Map도 마찬가지다.

arr, set, map의 생김새는 다음과 같다.

Symbol.iterator은 어떤 객체의 key로 사용될 수 있다.

arr[Symbol.iterator]

라고 나온다.

arr[Symbol.iterator] = null 이라고 함수를 없애면

이라고 arr은 이터러블이 아니라고 에러가 난다.

이말은 즉, arr은 이터러블 이라는 말이다.

이터러블은, 이터레이터를 리턴하는 [Symbol.iterator]() 를 가진 값 이다.

이터레이터는, { value, done } 객체를 리턴하는 next() 를 가진 값 이다.

Map에서 keys(), values(), entries() 속성

  • keys()

for (const a of map.keys()) log(a);

  • values()

for (const a of map.values()) log(a);

  • entries()

for (const a of map.entries()) log(a);

이터러블

이터레이터를 리턴하는 [Symbol.iterator]() 를 가진 값

이터레이터

{ value, done } 객체를 리턴하는 next() 를 가진 값

이터레이터 프로토콜

이터러블을 for...of , 전개 연산자 등과 함께 동작하도록 한 규약

사용자 정의 이터러블

constiterable= {
    [Symbol.iterator]() {
        let i = 3;
        return {
            next() {
                return i == 0 ? { done: true } : { value: i--, done: false };
            }
        }
    }
};
letiterator=iterable[Symbol.iterator]();
for (const a ofiterable)log(a);

전개연산자

consta= [1, 2];
log([...a, ...[3, 4], ...arr, ...set, ...map.values(), ...map.keys()])
profile
맨땅에 헤딩 🐣

0개의 댓글