ネストされた JavaScript オブジェクト キーの存在テスト
深くネストされたオブジェクト プロパティの存在を識別するのは困難な場合があります。ドット表記を使用してマルチレベル キーにアクセスしようとすると、中間レベルが未定義または null の場合、エラーが発生する可能性があります。
既存のアプローチ:
1 つの一般的なアプローチ条件文を使用してネストされたオブジェクトの各レベルを手動でチェックし、目的のキーにアクセスする前にすべてのレベルが存在することを確認します。ただし、深くネストされたオブジェクトの場合、この方法は退屈でエラーが発生しやすくなります。
より良いオプション:
より堅牢な解決策は、オブジェクトを再帰的にチェックする関数を作成することです。ネストされたキーの存在。この関数は、オブジェクトと一連のレベル名を引数として受け取り、各レベルを反復処理して、オブジェクトが存在するかどうか、およびその値が未定義または 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 を返します。レベルが存在し、そうでない場合は false。
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):
さらに、ネストされたプロパティの値を取得するには、次の 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 サイトの他の関連記事を参照してください。