如何使用变量名访问Javascript循环中嵌套对象内的元素?

时间:2013-01-23 08:58:59

标签: javascript jquery arrays object nested

我很无能为力。我有一个像这样的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在循环中访问嵌套对象?

3 个答案:

答案 0 :(得分: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"

请参阅:DEMO

我认为您应该更改的是您的数据模型,因为目前它与JSON的想法相差甚远,并且访问数据总是非常困难。

答案 1 :(得分: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 
    }
}

答案 2 :(得分:0)

index_nameundefined,因为之前的行会引发错误

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

只需使用简单的字符串

doc = "postname"