JavaScript 이터레이터로 중첩된 데이터 구조 평탄화하기

Beginner

This tutorial is from open-source community. Access the source code

소개

이 랩에서는 JavaScript 의 이터레이터 (iterator) 와 제너레이터 (generator) 개념을 탐구합니다. 특히, 중첩된 배열과 세트를 반복하고 이를 단일 반복 가능 객체로 평탄화할 수 있는 플랫 이터레이터 (flat iterator) 를 만드는 데 중점을 둡니다. 이를 통해 중첩된 데이터 구조에 보다 효율적으로 접근하고 조작할 수 있습니다. 이 랩을 마치면 제너레이터와 이터레이터가 어떻게 작동하는지, 그리고 실제 문제를 해결하는 데 어떻게 적용할 수 있는지 더 깊이 이해하게 될 것입니다.

플랫 이터레이터 (Flat Iterator) 설명

반복 가능한 객체를 반복하고 중첩된 반복 가능 객체를 평탄화하는 제너레이터를 만들려면 다음 단계를 따르세요.

  1. 터미널/SSH 를 열고 node를 입력하여 코딩 연습을 시작합니다.
  2. 제너레이터 함수에서 재귀 (recursion) 를 사용합니다.
  3. for...of 루프를 사용하여 주어진 반복 가능 객체의 값을 반복합니다.
  4. Symbol.iterator를 사용하여 각 값이 반복 가능한 객체인지 확인합니다.
  5. 반복 가능한 객체인 경우, yield* 표현식을 사용하여 동일한 제너레이터 함수에 재귀적으로 위임합니다.
  6. 그렇지 않으면 현재 값을 yield합니다.

다음은 코드 예시입니다.

const flatIterator = function* (itr) {
  for (let item of itr) {
    if (item[Symbol.iterator]) yield* flatIterator(item);
    else yield item;
  }
};

const arr = [1, 2, [3, 4], [5, [6, [7], 8]], 9, new Set([10, 11])];
[...flatIterator(arr)]; // 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11

이 예제에서 arr는 중첩된 배열과 세트를 포함한 값의 배열입니다. flatIterator 제너레이터 함수는 이러한 중첩된 값을 평탄화하고 평탄화된 배열을 반환하는 데 사용됩니다.

요약

축하합니다! 플랫 이터레이터 랩을 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 실력을 향상시킬 수 있습니다.