【问题标题】:Go over JSON object with running index遍历带有运行索引的 JSON 对象
【发布时间】:2017-08-19 23:28:19
【问题描述】:
我有以下 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 等单独写 if。
【问题讨论】:
标签:
javascript
json
angular
for-loop
【解决方案1】:
在代码中,您要在不存在的对象中搜索名为“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]);
}
}
【解决方案2】:
如果要访问对象的各个属性,则可以使用索引运算符,例如myObj['r1']。例如,您的循环可能如下所示:
for (var j = 1; j <= 3; j++) {
var tmpR = "r" + j;
var r = myObj[tmpR];
if (r == "y") {
//some code...
}
}
【解决方案3】:
您正在寻找一个在您的 jason 对象中不存在的属性。你需要这样做:
for (var j=1 ; j<= 3 ; j++) {
if(myObj['r'+j] === "y") {
//some code...
}
}
【解决方案4】:
如here 所述,有两种方法可以访问对象的属性。
当您想通过动态变量访问对象属性时,您必须使用括号表示法。
可以看例子,写的更实用:
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]}`));