使用正在运行的索引遍历 JSON 对象



我有以下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]}`));

最新更新