ネストされたプロパティを持つ複雑な 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. Reduce ベースの関数:
ネストされたプロパティの値を取得するには、次の 1 行関数を使用できます:
function getNested(obj, ...args) { return args.reduce((obj, level) => obj && obj[level], obj) }
例:
console.log(getNested(test, 'level1', 'level2', 'level3')); // 'level3'
以上がJavaScript オブジェクト内のネストされたキーの存在を確実に確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。