> 웹 프론트엔드 > JS 튜토리얼 > 중첩된 JavaScript 개체 키 존재를 효율적으로 확인하는 방법은 무엇입니까?

중첩된 JavaScript 개체 키 존재를 효율적으로 확인하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-19 09:17:10
원래의
189명이 탐색했습니다.

How to Efficiently Check for Nested JavaScript Object Key Existence?

중첩된 JavaScript 객체 키 존재 테스트

깊게 중첩된 객체 속성의 존재를 식별하는 것은 어려울 수 있습니다. 다중 레벨 키에 액세스하기 위해 점 표기법을 사용하려고 할 때 중간 레벨이 정의되지 않거나 null이면 오류가 발생할 수 있습니다.

기존 접근 방식:

일반적인 접근 방식 중 하나 조건문을 사용하여 중첩된 개체의 각 수준을 수동으로 확인하여 원하는 키에 액세스하기 전에 모든 수준이 존재하는지 확인하는 것입니다. 그러나 이 방법은 깊게 중첩된 객체의 경우 지루하고 오류가 발생하기 쉽습니다.

더 나은 옵션:

더 강력한 솔루션은 중첩된 키가 존재합니다. 이 함수는 개체와 일련의 레벨 이름을 인수로 사용하고 각 레벨을 반복하면서 해당 레벨이 존재하는지, 해당 값이 정의되지 않았거나 null이 아닌지 확인합니다.

함수 구현:

다음은 단계별 함수 구현입니다.

function checkNested(obj /*, level1, level2, ... levelN*/) {
  var args = Array.prototype.slice.call(arguments, 1);

  for (var i = 0; i < args.length; i++) {
    if (!obj || !obj.hasOwnProperty(args[i])) {
      return false;
    }
    obj = obj[args[i]];
  }
  return true;
}
로그인 후 복사

이 함수는 지정된 수준이 모두 충족되면 true를 반환합니다. 존재하고 그렇지 않으면 거짓입니다.

ES6 업데이트:

ES6에서는 재귀 및 마무리 호출 최적화를 사용하여 이 함수의 보다 간결한 버전이 가능합니다.

function checkNested(obj, level,  ...rest) {
  if (obj === undefined) return false
  if (rest.length == 0 && obj.hasOwnProperty(level)) return true
  return checkNested(obj[level], ...rest)
}
로그인 후 복사

예시 사용법:

var test = {level1:{level2:{level3:'level3'}} };

checkNested(test, 'level1', 'level2', 'level3'); // true
checkNested(test, 'level1', 'level2', 'foo'); // false
로그인 후 복사

값 검색(ES6):

또한 중첩된 속성의 값을 검색하려면 다음 한 줄 함수를 사용할 수 있습니다. BE 사용:

function getNested(obj, ...args) {
  return args.reduce((obj, level) => obj && obj[level], obj)
}
로그인 후 복사

예:

console.log(getNested(test, 'level1', 'level2', 'level3')); // 'level3'
로그인 후 복사

위 내용은 중첩된 JavaScript 개체 키 존재를 효율적으로 확인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿