모자딥 34장 이터러블

릿·2023년 2월 8일
0

34장 이터러블

34.1 이터레이션 프로토콜 (ES6)


  • 순회 가능한 데이터 컬렉션

34.1.1 이터러블

  • 이터러블 프로토콜을 준수한 객체
  • Symbol.iterator를 프로퍼티 키로 사용한 메서드를 직접 구현하거나 프로토타입 체인을 통해 상속받은 객체
  • 이터러블인지 확인하는 방법
const isIterable = v => v !== null && typeof v[Symbol.iterator] === 'function';

isIterable([]); // -> true
isIterable(''); // -> true
isIterable(new Map()); // -> true
isIterable(new Set()); // -> true
isIterable({}); // -> false

34.1.2 이터레이터

  • 이터러블 Symbol.iterator메서드를 호출하면 이터레이터 프로토콜을 준수한 이터레이터 반환
  • next메서드를 가짐

1. next메서드

  • 이터러블의 각 요소를 순회하기 위한 포인터 역할을 함
  • iterator result object반환
  • value 프로퍼티 : 현재 순회중인 이터러블의 값
  • done 프로퍼티 : 이터러블 순회 완료 여부
const array = []];

const iterator = array[Symbol.iterator]();

console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
console.log(iterator.next()); // { value: undefined, done: true }

34.2 빌트인 이터러블



34.3 for...of문


  • 이터러블을 순회하면서 이터러블 요소를 변수에 할당함

    for (변수선언문 of 이터러블) { ... }

for (const item of [1, 2, 3]) {
  console.log(item); // 1 2 3
}

34.4 이터러블과 유사 배열 객체


1. 유사 배열 객체

  • 인덱스로 프로퍼티 값에 접근 가능
  • length프로퍼티를 가짐
  • for문 순회 가능
  • 일반 객체이므로 for...of으로 순회 불가
  • Array.from으로 배열로 변환가능
const arrayLike = {
  0: 1,
  1: 2,
  2: 3,
  length: 3
}

const arr = Array.from(arrayLike);
console.log(arr); // [1, 2, 3]

34.5 이터레이션 프로토콜의 필요성


  • 데이터 소비자와 데이터 공급자를 연결하는 인터페이스 역할을 함

34.6 사용자 정의 이터러블


34.6.1 사용자 정의 이터러블 구현

  • 일반객체도 이터레이션 프로토콜을 준수하도록 수현하면 사용자 정의 이터러블이 됨
  • 이터러블은 스프레드 문법, 배열 스트럭처링 할당에도 사용 가능
const arr = [...fibonacci];
console.log(arr); // [1, 2, 3, 5, 8]

const [first, second, ...rest] = fibonacci;
console.log(first, second, rest); // 1 2 [3, 5, 8]
profile
항상 재밌는 뭔가를 찾고 있는 프론트엔드 개발자

0개의 댓글