소개
이 랩에서는 재귀를 사용하여 주어진 객체의 모든 키를 순회하는 제너레이터 함수를 생성하는 개념을 탐구합니다. 이 랩의 목적은 학습자가 yield 및 yield* 표현식을 for...of 루프 및 Object.keys()와 함께 사용하여 객체 키와 해당 값을 반복하는 방법을 이해할 수 있도록 실습 경험을 제공하는 것입니다. 이 랩을 마치면 학습자는 객체를 재귀적으로 순회하고 현재 경로를 나타내는 키 배열과 해당 값을 생성하는 방법에 대한 실질적인 이해를 갖게 될 것입니다.
객체 키 순회 코드
주어진 객체의 모든 키 목록을 생성하려면 다음 단계를 사용하십시오.
터미널/SSH 를 열고
node를 입력하여 코딩 연습을 시작합니다.객체와 키 배열을 인수로 받는
walk라는 제너레이터 함수를 정의합니다. 재귀를 사용하여 객체의 모든 키를 순회합니다.walk함수 내부에서for...of루프와Object.keys()를 사용하여 객체의 키를 반복합니다.typeof를 사용하여 주어진 객체의 각 값이 객체 자체인지 확인합니다. 값이 객체인 경우,yield*표현식을 사용하여 동일한 제너레이터 함수인walk에 재귀적으로 위임하고 현재key를 키 배열에 추가합니다.그렇지 않으면, 현재 경로와 주어진
key의 값을 나타내는 키 배열을yield합니다.yield*표현식을 사용하여walk제너레이터 함수에 위임합니다.
다음은 코드입니다.
const walkThrough = function* (obj) {
const walk = function* (x, previous = []) {
for (let key of Object.keys(x)) {
if (typeof x[key] === "object") yield* walk(x[key], [...previous, key]);
else yield [[...previous, key], x[key]];
}
};
yield* walk(obj);
};
코드를 테스트하려면 객체를 생성하고 walkThrough 함수를 사용하여 모든 키 목록을 생성합니다.
const obj = {
a: 10,
b: 20,
c: {
d: 10,
e: 20,
f: [30, 40]
},
g: [
{
h: 10,
i: 20
},
{
j: 30
},
40
]
};
[...walkThrough(obj)];
/*
[
[['a'], 10],
[['b'], 20],
[['c', 'd'], 10],
[['c', 'e'], 20],
[['c', 'f', '0'], 30],
[['c', 'f', '1'], 40],
[['g', '0', 'h'], 10],
[['g', '0', 'i'], 20],
[['g', '1', 'j'], 30],
[['g', '2'], 40]
]
*/
요약
축하합니다! 객체 순회 랩을 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.