我有以下JSON:
var myObj;
myObj = {
"name": "A",
"r1":"y",
"r2":"n",
"r3":"y",
"lname": "B"
};
//And I want to iterate on this object by for loop as follows:
for (var j=1 ; j<= 3 ; j++)
{
var tmpR = "r" + j;
if(myObj.tmpR == "y")
{
//some code...
}
}
它不起作用,我总是得到"undefined"
,如果我"r1"
而不是tmpR
就可以了。如何迭代此对象? 如果为了r1, r2
等等,我不想单独写。
在代码中,您要在不存在的对象中搜索名为"tmpR"的键,您需要使用括号表示法。
var myObj;
myObj = {
"name": "A",
"r1":"y",
"r2":"n",
"r3":"y",
"lname": "B"
};
for (var j = 1; j <= 3; j++) {
var tmpR = "r" + j;
if(myObj[tmpR] == "y") {
console.log('key: ' + tmpR + ' value: ' + myObj[tmpR]);
}
}
如果要访问对象的各个属性,则可以使用索引运算符,例如myObj['r1']
。 例如,您的循环可能如下所示:
for (var j = 1; j <= 3; j++) {
var tmpR = "r" + j;
var r = myObj[tmpR];
if (r == "y") {
//some code...
}
}
您正在寻找 jason 对象中不存在的属性。您需要这样做:
for (var j=1 ; j<= 3 ; j++) {
if(myObj['r'+j] === "y") {
//some code...
}
}
有两种方法可以访问对象的属性,如此处所述。
如果要使用动态变量访问对象属性,因此必须使用Bracket 表示法。
您可以看到以更实用的方式编写的示例:
const myObj = {
"name": "A",
"r1":"y",
"r2":"n",
"r3":"y",
"lname": "B"
};
[1,2,3].map(n => `r${n}`)
.filter(k => myObj[k] === 'y')
.forEach(k => console.log(`Key: ${k} - value: ${myObj[k]}`));