Javascript for循环通过JSON值

时间:2011-06-13 15:19:27

标签: javascript json

我有一个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;
} 

3 个答案:

答案 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)

当您应该datestringr[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;
        }
    }
}