ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript オブジェクト内のネストされたキーの存在を確実に確認するにはどうすればよいですか?

JavaScript オブジェクト内のネストされたキーの存在を確実に確認するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-20 17:43:09
オリジナル
312 人が閲覧しました

How Can I Robustly Check for Nested Key Existence in JavaScript Objects?

ネストされた JavaScript オブジェクト キーの存在のテスト

ネストされたプロパティを持つ複雑な 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 &amp;&amp; obj.hasOwnProperty(level)) return true
  return checkNested(obj[level], ...rest)
}
ログイン後にコピー

2. Reduce ベースの関数:

ネストされたプロパティの値を取得するには、次の 1 行関数を使用できます:

function getNested(obj, ...args) {
  return args.reduce((obj, level) => obj &amp;&amp; obj[level], obj)
}
ログイン後にコピー

例:

console.log(getNested(test, 'level1', 'level2', 'level3')); // 'level3'
ログイン後にコピー

以上がJavaScript オブジェクト内のネストされたキーの存在を確実に確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート