问题描述
|
我有一个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\"
}
]
我希望有一个Java脚本For循环可以遍历dateX值。
我知道X在1到最大值之间。
但是以下代码不起作用:
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;
}
解决方法
首先使用普通的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
}
}
}
遍历所有可能的属性值以检查它们的存在是违反直觉的并且效率低下。相反,请遍历实际属性,并根据您的模式测试其名称。
, 当您应该做r[i][datestring]
或r[i][\'date\'+j]
时,正在寻找名为datestring
的属性。这将读取变量的值,并查找具有该名称的属性。
, 免责声明:如果您是来这里寻找与原始发布者要求的方法相同的方法遍历JSON值的示例,那么我下面的Ates答案是更好的方法,请不要使用此方法。
我不确定为什么您想做任何尝试,因为您会疯狂地覆盖ѭ10中的值,但是您可能比我们更了解自己在做什么,这是可行的基于您的代码的示例。
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;
}
}
}