2012-03-29 90 views
1

我有一個JSON數組,看起來像這樣:的foreach爲JavaScript,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 

我不確定如何做到這一點,我嘗試過一次,但沒有成功。

所有幫助將不勝感激。

回答

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循環通常被用於此類型迭代的和不for..in結合。因爲可以訪問不需要的屬性! http://javascriptweblog.wordpress.com/2011/01/04/exploring-javascript-for-in-loops/

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"}

他們分別變爲:

  • 語法錯誤:輸入意外結束(單逃逸逃逸字符串的結尾)
  • 語法錯誤:意外的標識符(轉義的單引號,跳出的串,實際上是一個XSS漏洞
  • 對象
    鍵:「S omeackslash」(\\b成爲\b退格鍵控制字符)
    __proto__:對象

你可以再次逃脫,但沒有必要;有效的JSON始終是一個有效的JavaScript對象,並且您可以相信您自己的PHP不會在其中包含注入代碼。

+2

parseJSON爲什麼危險? – brice 2012-03-29 13:57:37

+0

@brice:考慮我有一個反斜槓的數據。 PHP將它轉義爲:'{「blah」:「some \\ backslash」}'並且它進入字符串:''{「blah」:「some \\ backslash」}「',結果是一個對象屬性'blah'不包含反斜槓和'b',而是一個退格控制字符。如果反斜槓恰好在字符串的末尾,則一切都會爆炸。如果JSON的任何地方有撇號,一切都會爆炸。 – Ryan 2012-03-29 13:59:20

+1

@minitech是不是paresJSON的點,以優雅地處理這樣的問題?除此之外,我們都知道eval是邪惡等等,但是當你控制數據的時候,人們對它的使用反應過度(不是說你應該儘可能避免它,但是......)。不過我同意parseJSON是完全不必要的。 – Snuffleupagus 2012-03-29 14:03:04

-1
for(var i=0;i<unavailableDates.length;i++) { 
    unavailableDates[i] = unavailableDates[i].RegDate; 
} 
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

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);​ 
0

試試這個,它可能工作。

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