オブジェクトからより深いプロパティを取得するのは面倒なことで有名です。親が存在しない場合は、エラーが発生します。したがって、親が存在しない場合は、プロパティへのアクセスを停止する必要があります。
これを行う無知な方法は次のとおりです。
if (parent.value && parent.value.subvalue && parent.value.subvalue.targetvalue)
var myVal = parent.value.subvalue.targetvalue;
else
var myVal = null;
プロパティを頻繁に取得する必要がある場合、これは機能せず、ショートカット機能が必要です。最初に私はこのようなことをしました:
function getProp(path) {
try {
return eval(path);
}
catch (e) {
return null;
}
};
// getProp('parent.value.subvalue.targetvalue');
しかし、これは少なくとも 2 つの理由で不十分です: オブジェクトはスコープ内になければならず、誰も を使いたがりませんeval()
。
したがって、オブジェクトを関数に適用する方が良いかもしれません:
function getProp(path, parent) {
path = path.split('.');
var val = parent;
for (var k = 0; k < path.length; k++) {
var key = path[k];
try {
val = val[key];
}
catch (e) {
return null;
}
}
return val;
};
// getProp('value.subvalue.targetvalue', parent);
しかし、なんとなくまだ気分が乗らない。
これどうやってやるの?ベストプラクティスとは?
親が存在する場合と存在しない場合があるオブジェクトの深いプロパティを設定することは、さらに面倒です。
parent = parent || {};
parent.value = parent.value || {};
parent.value.subvalue = parent.value.subvalue || {};
parent.value.subvalue.target = "YAY SOME VALUE!"
どうすればうまく対処できますか?
これは頻繁に行う必要があるため、これに対する JavaScript ネイティブ関数はまだありますか?