4

我一无所知。我有一个这样的 JSON 字符串,我需要检查提供的“属性”(postsome在以下示例中):

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

我有任意数量的索引(“indexAB”,“index_random”),n里面有对象。

我需要“找到”我的财产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 回答