我有一个json对象r
:
[ { "id" : "3443",
"name" : "Joe",
"date1" : "254",
"date4" : "261"
},
{ "id" : "50942",
"name" : "John",
"date2" : "192",
"date4" : "195"
},
{ "id" : "2524",
"name" : "Mary",
"date1" : "153",
"date4" : "163"
}
]
我希望有一个Javascript For循环来遍历dateX值。 我知道X介于1和Max值之间。
但是以下代码不起作用:
for (j=1; j<=Max; j=j+1)
{
datestring = 'date' + j;
if (isset(r[i].datestring)) value[j] = r[i].datestring;
else value[j] = null;
}
忘了解释我将isset函数定义为:
function isset(variable) {
return typeof(variable) != "undefined" && variable !== null;
}
答案 0 :(得分:10)
首先使用普通的for循环遍历对象数组。然后使用for (var p in obj)
遍历每个对象的属性,并检查p
的值。类似的东西:
for (var i = 0; i < arr.length; i++) {
var obj = arr[i];
for (var p in obj) {
if (/^date\d+$/.test(p)) {
var value = obj[p];
// p is a dateX property name and value is the value
}
}
}
循环遍历所有可能的属性值以检查它们的存在是违反直觉和低效的。相反,循环实际属性并根据您的模式测试它们的名称。
答案 1 :(得分:3)
当您应该datestring
或r[i][datestring]
时,您正在寻找名为r[i]['date'+j]
的媒体资源。这将读取变量的值并查看具有该名称的属性。
答案 2 :(得分:1)
免责声明:如果你来到这里寻找一个循环通过JSON值的例子,就像原始海报所要求的那样,我下面的Ates答案是一个好得多的方法,请不要使用这个。
我不确定你为什么要做你正在尝试的任何事情,因为你要像value
那样疯狂地覆盖价值观,但你可能比我们更了解你所做的事情。下面是一个基于代码的工作示例。
var r = [
{
"id":"3443",
"name":"Joe",
"date1":"254",
"date4":"261"
},
{
"id":"50942",
"name":"John",
"date2":"192",
"date4":"195"
},
{
"id":"2524",
"name":"Mary",
"date1":"153",
"date4":"163"
}
];
var max = 10; // guess
var value = {};
for(var i in r)
{
for (j=0; j<=max; j++)
{
datestring = 'date'+j;
if (undefined != r[i][datestring])
{
value[j] = r[i][datestring];
}
else
{
value[j] = null;
}
}
}