次のような JSON オブジェクトがあるとします。
var a = {
"b" : {
"c" : 1
}
}
文字列 "bc" を知っているときに c に到達する簡単な方法はありますか?
文字列をドットで分割し、そこから c にドリルダウンできると思いますが、これを一度に行う簡単な方法があることを望んでいました。
私が望んでいたようにvar c = a["b.c"]
、それはうまくいきません
次のような JSON オブジェクトがあるとします。
var a = {
"b" : {
"c" : 1
}
}
文字列 "bc" を知っているときに c に到達する簡単な方法はありますか?
文字列をドットで分割し、そこから c にドリルダウンできると思いますが、これを一度に行う簡単な方法があることを望んでいました。
私が望んでいたようにvar c = a["b.c"]
、それはうまくいきません
あなたが分割の使用を提案したように、このようなものはどうですか:
var a = {
"b" : {
"c" : 1
}
}
var n = "b.c".split(".");
var x = a;
for(var i = 0; i < n.length; i++){
x = x[n[i]];
}
//x should now equal a.b.c
パスが有効でない場合は、追加のチェックを行う必要があります。私のコードが上にx
あるようundefined
に、パスの最後の部分が無効な場合(「bd」など)になります。パスの他の部分 (「dc」など) が無効な場合、javascript はエラーになります。
undefined
これは、 の最初のインスタンスでループを終了する変更x
された例undefined
です。
var n = "d.c".split(".");
var x = a;
for (var i = 0; i < n.length; i++) {
x = x[n[i]];
if (typeof(x) == "undefined") {
break;
}
}
var a = {
"b" : {
"c" : 1
}
}
var c = "b.c".split(".").reduce(function(obj, key) {
return obj[key];
}, a);
alert(c)
reduceを参照してください。このリンクには、ES5 をサポートしていないブラウザーに shim を実装する方法も示されています。このコードは単純化されていることに注意してください。キーがオブジェクトに存在することを前提としています。