繁体   English   中英

Javascript 用于循环通过 JSON 值

[英]Javascript for loop through JSON values

我有一个 json object 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"
  }
]

我希望通过 dateX 值有一个 Javascript For 循环到 go。 我知道 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 定义为:

function isset(variable) {
  return typeof(variable) != "undefined" && variable !== null;
} 

首先使用普通的 for 循环遍历对象数组。 然后使用for (var p in obj)遍历每个 object 的属性并检查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 答案是一种更好的方法,请不要使用这个方法。

我不确定你为什么要做你想做的任何事情,因为你会疯狂地覆盖价值的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;
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM