0

次のような JSON オブジェクトがあるとします。

var a = {
  "b" : {
    "c" : 1
  }
}

文字列 "bc" を知っているときに c に到達する簡単な方法はありますか?

文字列をドットで分割し、そこから c にドリルダウンできると思いますが、これを一度に行う簡単な方法があることを望んでいました。

私が望んでいたようにvar c = a["b.c"]、それはうまくいきません

4

2 に答える 2

4

あなたが分割の使用を提案したように、このようなものはどうですか:

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;
    }
}

これが実際の動作例です

于 2013-02-15T16:12:06.593 に答える
1
var a = {
  "b" : {
    "c" : 1
  }
}

var c = "b.c".split(".").reduce(function(obj, key) {
    return obj[key];
}, a);

alert(c)

reduceを参照してください。このリンクには、ES5 をサポートしていないブラウザーに shim を実装する方法も示されています。このコードは単純化されていることに注意してください。キーがオブジェクトに存在することを前提としています。

于 2013-02-15T16:12:36.893 に答える