4

私は無知です。提供された「プロパティ」を確認する必要がある次のような JSON 文字列があります (postsome次の例)。

var index_file =
[{
 "indexAB":[
    { "postsome": ["keyword_abc", "keyword_def"] },
    { "testsome": ["keyword_111", "keyword_222"] }
  ]
},{
 "index_random": [
    { "postsome": ["keyword_abc"] }
  ]
}]

n内部にオブジェクトを持つ任意の数のインデックス ("indexAB"、"index_random") が存在する可能性があります。

プロパティを「見つける」必要がありますpostsomeが、オブジェクトにアクセスする正しい方法に苦労しているため、機能させることができません。

そう:

for (var i = 0, l = indices.length; i < l; i += 1) {

        doc._id = "postsome",
        index_name = "indexAB";

    indices[i]["indexAB"];             // ok, returns object on correct iteration
    indices[i][index_name];            // undefined
    indices[i].indexAB[0][doc._id]     // ok, returns undefined or keywords
    indices[i][index_name][0][doc._id] // undefined 
}

質問:
変数名を使用してループ内のネストされたオブジェクトにアクセスするにはどうすればよいindex_nameですか?

4

3 に答える 3

2

これはあなたの質問に対する直接的な答えではありませんが、オブジェクトの値にアクセスするための複雑な方法を提供する以上に、実際に役立つと思います。

この JSON オブジェクトの代わりに:

var index_file =
[{
 "indexAB":[
    { "postsome": ["keyword_abc", "keyword_def"] },
    { "testsome": ["keyword_111", "keyword_222"] }
  ]
},{
 "index_random": [
    { "postsome": ["keyword_abc"] }
  ]
}];

このはるかに単純なデータ構造になります。

var index_file =
{
  "indexAB": {
    "postsome": ["keyword_abc", "keyword_def"],
    "testsome": ["keyword_111", "keyword_222"]
  },
  "index_random": {
    "postsome": ["keyword_abc"]
  }
};

次に、次のようにすると、アクセスがはるかに簡単になります。

var value = index_file.indexAB.postsome[0]; // no loops, no nothing
//  value == "keyword_abc"

参照:デモ

現在、JSON の概念からかけ離れたものであり、その中のデータにアクセスすることは常に非常に困難であるため、データ モデルを変更する必要があると思います。

于 2013-01-23T09:08:00.140 に答える
1

いくつかの問題

  • 「indexAB」は配列の最初の要素にのみ存在します
  • 変数名内にドットを含めることはできません。

さらに参照する前に、 indexAB がオブジェクトのプロパティであるかどうかをテストすることをお勧めします。以下の例を参照してください。

修理済み

var indices = index_file;
for (var i = 0, l = indices.length; i < l; i++) {

    var doc_id = "postsome";
    var index_name = "indexAB";

    indices[i]["indexAB"];             // ok, returns object on correct iteration
    indices[i][index_name];            // undefined
    if ("indexAB" in indices[i]) {
      indices[i].indexAB[0][doc_id]     // ok, returns undefined or keywords
      indices[i][index_name][0][doc_id] // undefined 
    }
}
于 2013-01-23T09:12:21.880 に答える
0

index_nameundefinedその前の行でエラーが発生するためです

doc._id = "postname" // this causes an error

単純な文字列を使用するだけです

doc = "postname"
于 2013-01-23T09:04:19.647 に答える