중첩 속성이 있는 복잡한 JavaScript 개체를 처리할 때 중첩된 키의 존재를 확인하는 것이 어려울 수 있습니다. 다음은 중첩된 개체 키 존재를 테스트하기 위한 모범 사례에 대한 심층 탐색을 제공합니다.
질문에서 설명된 것처럼 전통적인 접근 방식은 중첩된 개체의 각 수준을 순차적으로 확인하는 것입니다.
if (test.level1 && test.level1.level2 && test.level1.level2.level3) { alert(test.level1.level2.level3); }
그러나 이 접근 방식은 존재하지 않는 속성이 발견될 때 예외가 발생하기 쉽습니다.
해결책: 반복 존재 검사기
강건성을 향상시키기 위해 더 적합한 솔루션은 예외를 트리거하지 않고 중첩 속성의 존재를 반복적으로 확인하는 함수를 만드는 것입니다.
function checkNested(obj, ...args) { for (var i = 0; i < args.length; i++) { if (!obj || !obj.hasOwnProperty(args[i])) { return false; } obj = obj[args[i]]; } return true; }
이 함수는 모든 속성 이름의 수를 인수로 사용하고 모든 속성 이름이 중첩된 객체에 존재하면 true를 반환합니다. 예:
var test = {level1:{level2:{level3:'level3'}} }; checkNested(test, 'level1', 'level2', 'level3'); // true checkNested(test, 'level1', 'level2', 'foo'); // false
ES6 솔루션
ES6은 존재 확인을 위한 더욱 간결하고 우아한 옵션을 제공합니다.
1. 꼬리 재귀 함수:
function checkNested(obj, level, ...rest) { if (obj === undefined) return false if (rest.length == 0 && obj.hasOwnProperty(level)) return true return checkNested(obj[level], ...rest) }
2. 감소 기반 함수:
중첩 속성의 값을 검색하려면 다음 한 줄 함수를 사용할 수 있습니다.
function getNested(obj, ...args) { return args.reduce((obj, level) => obj && obj[level], obj) }
예:
console.log(getNested(test, 'level1', 'level2', 'level3')); // 'level3'
위 내용은 JavaScript 개체에 중첩된 키가 있는지 어떻게 확실하게 확인할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!