我有一个Javascript对象,如果postsome
未定义,我正在努力检查循环。
这是我的目标:
var indices = [{
"indexAB": [{
"postsome": [
"keyword_abc",
"keyword_def"
]
}]
},{
"indexA": [{
"postsome": [
"keyword_abc"
]
}]
}
]
问题是,我无法直接引用indexA
,indexAB
或postsome
。一切都将是变数。这就是我正在尝试的:
// passed parameter
var doc._id = "postsome";
// mapping priv
// "indices": [
// {"name":"indexA","fields":["findMeA"]},
// {"name":"indexAB", "fields":["findMeA","findMeB"]}
// ],
for (var i = 0, l = indices.length; i < l; i += 1) {
var index = priv.indices[i];
index_name = index["name"]; // indexAB or indexA
// I can't reference indexAB directly
if ( indices[i].indexAB !== undefined && indices[i].indexAB.length > 0 ) {
console.log( indices[i].indexAB );
console.log( indices[i].indexAB[0][doc._id] );
if (indices[i].indexAB[0][doc._id] !== undefined) {
console.log("gotcha");
trigger = true;
}
}
}
因此,当我使用indexAB
硬编码时,它可以工作,但我需要遍历值('indexA'和'indexAB'instea)。
问题:
有没有办法用变量替换.indexAB[0]
?如果是这样,怎么样?
谢谢!
答案 0 :(得分:0)
只需使用括号表示法,与[doc._id]
完全相同。
if (indices[i][index_name] !== undefined && indices[i][index_name].length > 0)
括号表示法和点表示法是可互换的,因此这两行是等效的:
indices.foo
indices["foo"]
但是,如果需要使用变量,indices.varName
将转换为indices["varName"]
,因此必须使用括号表示法来确保它使用变量值而不是变量名作为字符串。