我很无能为力。我有一个像这样的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
在循环中访问嵌套对象?
答案 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是否是对象的属性。见下面的例子:
固定
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_name
为undefined
,因为之前的行会引发错误
doc._id = "postname" // this causes an error
只需使用简单的字符串
doc = "postname"