foreach for javascript,json array

时间:2012-03-29 13:52:13

标签: php javascript jquery json

我有一个看起来像这样的JSON数组:

[{"RegDate":"31-03-2011"},{"RegDate":"29-07-2011"},{"RegDate":"09-08-2011"},{"RegDate":"09-08-2011"},{"RegDate":"09-08-2011"},{"RegDate":"12-08-2011"},{"RegDate":"15-08-2011"},{"RegDate":"15-08-2011"},{"RegDate":"23-08-2011"},{"RegDate":"07-09-2011"},{"RegDate":"09-09-2011"},{"RegDate":"13-10-2011"},{"RegDate":"13-10-2011"},{"RegDate":"13-10-2011"},{"RegDate":"25-10-2011"},{"RegDate":"25-10-2011"},{"RegDate":"03-11-2011"},{"RegDate":"03-11-2011"},{"RegDate":"11-11-2011"},{"RegDate":"16-11-2011"},{"RegDate":"18-11-2011"},{"RegDate":"21-11-2011"},{"RegDate":"02-12-2011"},{"RegDate":"02-12-2011"},{"RegDate":"12-12-2011"}]

获取此json数组的代码如下所示:

var unavailableDates1 = jQuery.parseJSON('<?php echo json_encode($noticesDates) ?>');

我正在尝试获取该数组中的所有日期(最初是一个多维数组),并将其放在一个数组中:

var unavailableDates = ["9-3-2012", "14-3-2012", "15-3-2012"]; for example

我不确定如何做到这一点,我尝试了一个foreach但是没有成功。

所有帮助将不胜感激。

7 个答案:

答案 0 :(得分:7)

首先,parseJSON是不必要的,实际上是危险的。拿出来:

var unavailableDates1 = <?php echo json_encode($noticesDates) ?>;

然后,只需使用jQuery.map

var unavailableDates = $.map(unavailableDates1, function(item) {
    return item.RegDate;
});

使用这样的字符串对于以下三个对象是危险的,例如:

  • {"key":"Backslash here: \\"}
  • {"key":"I'm a horse!"}
  • {"key":"Some\\backslash"}

他们分别成为:

  • SyntaxError:意外的输入结束(单个转义转义字符串结束)
  • SyntaxError:意外的标识符(未转义的单引号突破字符串,实际上是XSS漏洞
  • 对象
    key:“Someackslash”(\\b成为\b退格控制字符)
    __proto__:对象

你可以再次逃脱它,但没有必要;有效的JSON始终是一个有效的JavaScript对象,您可以信任自己的PHP,不要在其中包含注入代码。

答案 1 :(得分:1)

var justDates = [];
for (var i=0; i < unavailableDates1.length; i++) {
   justDates.push(unavailableDates1[i]['RegDate']);
}

每个对象({'RegDate:'date'})是javascript数组中的一个项目。要获得项目,请使用数字索引。所以要获得第一项是theArray[0]这会给你{"RegDate":"31-03-2011"}。然后,要获得该特定日期字符串,您只需使用密钥theArray[0]['RegDate']!。因此,既然您希望遍历列表中的每个成员,则应使用.length获取列表长度。

for循环通常用于此类迭代,而不是用于..in。因为in in可以访问不受欢迎的属性! http://javascriptweblog.wordpress.com/2011/01/04/exploring-javascript-for-in-loops/

答案 2 :(得分:0)

看看how to iterate over an array。 你可以这样做:

dates = new Array();
unavailableDates1.forEach(function (obj){ 
    dates.push(obj.RegDate);
};

答案 3 :(得分:0)

尝试以下方法:

JavaScript的:

var x = [{"RegDate":"31-03-2011"},{"RegDate":"29-07-2011"},{"RegDate":"09-08-2011"},{"RegDate":"09-08-2011"},{"RegDate":"09-08-2011"},{"RegDate":"12-08-2011"},{"RegDate":"15-08-2011"},{"RegDate":"15-08-2011"},{"RegDate":"23-08-2011"},{"RegDate":"07-09-2011"},{"RegDate":"09-09-2011"},{"RegDate":"13-10-2011"},{"RegDate":"13-10-2011"},{"RegDate":"13-10-2011"},{"RegDate":"25-10-2011"},{"RegDate":"25-10-2011"},{"RegDate":"03-11-2011"},{"RegDate":"03-11-2011"},{"RegDate":"11-11-2011"},{"RegDate":"16-11-2011"},{"RegDate":"18-11-2011"},{"RegDate":"21-11-2011"},{"RegDate":"02-12-2011"},{"RegDate":"02-12-2011"},{"RegDate":"12-12-2011"}];
var ary = new Array();
for (foo in x) {
    ary.push(x[foo].RegDate);
}
console.log(ary);

<强> jsFiddle example

答案 4 :(得分:0)

我注意到你在这里标记了jquery,所以,这是一个jquery解决方案:

http://jsfiddle.net/aztechy/DK9KM/

var foo = [
  {"RegDate":"31-03-2011"},
  {"RegDate":"29-07-2011"},
  {"RegDate":"09-08-2011"},
  {"RegDate":"09-08-2011"}
];

var datesArray = [];
$.each(foo, function() {
  datesArray.push(this.RegDate);
});

console.log(datesArray);​

答案 5 :(得分:0)

试试这个,它可能有用。

var unavailableDates = [];
for(var i = 0; i < unavailableDates1.length; i++){
    unavailableDates[i] = unavailableDates1[i].RegDate;
}

答案 6 :(得分:-1)

for(var i=0;i<unavailableDates.length;i++) {
    unavailableDates[i] = unavailableDates[i].RegDate;
}