예를 들어, 중첩된 객체를 받아들이고 모든 키가 동일한 값을 가지고 있는지 여부에 따라 부울을 반환하는 isSame()과 같은 함수를 작성해야 한다고 가정해 보겠습니다. 모든 키를 말할 때 우리는 다음과 같은 모든 마지막 키를 의미합니다. 키의 값으로 중첩된 개체가 있는 경우 중첩된 개체의 끝으로 이동하여 해당 값을 확인해야 합니다.
예를 들어 - 개체가 -
인 경우const obj = { a: 1, b: 1, c: { aa: 1 } };
그런 다음 모든 종료 키가 동일한 값(1)을 가지므로 함수는 true를 반환해야 합니다. 따라서 이 문제에 대한 재귀 솔루션을 작성해 보겠습니다.
예시
const obj = { a: 1, b: 1, c: { aa: 3 } }; const allSame = (obj, value) => { const keys = Object.keys(obj); for(let i = 0; i < keys.length; i++){ if(typeof obj[keys[i]] === "object" && !Array.isArray(obj[keys[i]])){ return allSame(obj[keys[i]], value); }; if(!value){ value = obj[keys[i]]; continue; } if(obj[keys[i]] !== value){ return false; }; }; return true; } console.log(allSame(obj)); console.log(allSame({ a: 1, b: 1, c: { aa: 1 } })); console.log(allSame({ a: { x: 1 }, b: 1, c: { aa: 1 } })); console.log(allSame({ a: 1, b: 1, c: { aa: 2 } }));
출력
콘솔의 출력은 -
false true true false