2013-10-03 107 views
0

我有一個var對象被拉到日曆上顯示事件。如何將數組變量合併到對象數組中?

這是變種的一個例子:

var myEvents = {'10-02-2013' : '<span>Event1</span>','10-04-2013' : '<span>Event2</span>','12-25-2013' : '<span>Christmas Day</span>','12-31-2013' : '<span>New Year\'s Eve</span>'}; 

瓦爾myEvents輸出作爲

對象{2013年10月2日: 「事件1」,2013年10月4日: 「事件2」, 2013年12月25日:「聖誕節」,2013年12月31日:「除夕」}

因爲我也有相同類型的週期性事件,我對這樣的動態創建它們:

var day = 4; 
var date = new Date(); 
var nextYear = date.getFullYear() + 1; 
var recurring = []; 

while(date.getDay() != day) 
{ 
date.setDate(date.getDate() + 1)  
} 

while(date.getFullYear() < nextYear) 
{ 
var yyyy = date.getFullYear(); 

var mm = (date.getMonth() + 1); 
mm = (mm < 10) ? '0' + mm : mm; 

var dd = date.getDate(); 
dd = (dd < 10) ? '0' + dd : dd; 

var output = mm + '-' + dd + '-' + yyyy + ' : ' + '<span>Website Update</span>'; 
recurring.push(output); 
date.setDate(date.getDate() + 7); 
} 

變種重複輸出作爲

[ 「2013年10月3日:網站更新」, 「2013年10月10日:網站更新」, 「2013年10月17日:網站更新」,「10- 24-2013:網站更新「,」10-31-2013:網站更新「,」11-07-2013:網站更新「,」11-14-2013:網站更新「,」11-21-2013:網站更新「,」11-28-2013:網站更新「,」12-05-2013:網站更新「,」12-12-2013:網站更新「,」12-19-2013:網站更新「,」12-26 -2013:網站更新「]

我需要合併重複到myEvents,所以,當我拉myEvents我得到

對象{10-02-2013:「Event1」,10-04-2013:「Event2」,12-25-2013:「聖誕節」,12-31-2013:「除夕」,10- 03-2013:「網站更新」,10-10-2013:「網站更新」,10-17-2013:「網站更新」,10-24-2013:「網站更新」,10-31-2013:「網站更新「,11-07-2013:」網站更新「,11-14-2013:」網站更新「,11-21-2013:」網站更新「,11-28-2013:」網站更新「,12-05 -2013:「網站更新」,2013年12月12日:「網站更新」,2013年12月19日:「網站更新」,2013年12月26日:「網站更新」}

我以爲我可以只是得到作爲一個字符串使用

var recurring2 = recurring.join(); 

然後通過它myEvents像

var myEvents = { recurring2 + ('10-02-2013' : '<span>Event1</span>','10-04-2013' : '<span>Event2</span>','12-25-2013' : '<span>Christmas Day</span>','12-31-2013' : '<span>New Year\'s Eve</span>')}; 

但是,是的...我想我是個傻瓜。使用javascript移動我的第一步,即使經過長時間的研究,我也無法理解如何將該數組的var合併到我需要拖動的對象var中。 我如何實現這一目標?

+0

你試過'$ .grep()'嗎? – melancia

+0

$ .grep只是返回兩個變量,但仍然是一個數組,另一個是對象,以我的理解。我沒有將myEvents作爲添加了重複內容的對象。 – user1189579

+0

我明白了。只是在黑暗中拍攝而已。 – melancia

回答

0

你可以做些什麼像這樣

var day = 4; 
var date = new Date(); 
var nextYear = date.getFullYear() + 1; 
var recurring = {}; // Make recurring as new object instead of new Array. 

while(date.getDay() != day) { 
    date.setDate(date.getDate() + 1)  
} 

while(date.getFullYear() < nextYear) { 
    var yyyy = date.getFullYear(); 

    var mm = (date.getMonth() + 1); 
    mm = (mm < 10) ? '0' + mm : mm; 

    var dd = date.getDate(); 
    dd = (dd < 10) ? '0' + dd : dd; 

    // Assign as a property of the object instead of an array. 
    recurring['mm + '-' + dd + '-' + yyyy + '] = '<span>Website Update</span>'; 
    date.setDate(date.getDate() + 7); 
} 

var myEvents = {'10-02-2013' : '<span>Event1</span>','10-04-2013' : '<span>Event2</span>','12-25-2013' : '<span>Christmas Day</span>','12-31-2013' : '<span>New Year\'s Eve</span>'}; 

//Finally merge two objects. so you can get one overall object as expected. 
finalObject = $.extend({}, myEvents, recurring); 
+0

謝謝Ghanshyam。 $ .extend行上出現_ $ is not defined_錯誤? – user1189579

+0

與Tibos的答案一樣,我只獲取myEvents輸出,而重複項不會被合併。我會告訴你在jsbin,但你的代碼返回一個$未定義的錯誤 - http://jsbin.com/ObEDIWi/7/edit?html,js,output – user1189579

+0

其實我剛剛取代'經常性['mm +' - '+ dd +' - '+ yyyy +']'帶'經常性的[mm +' - '+ dd +' - '+ yyyy]',它就像一個魅力一樣。感謝我接受這個解決方案。 – user1189579

0

隨着注意對象的鍵必須是唯一的(所以如果你有在同一天兩個事件,第二個將覆蓋第一),你可以這樣做:

代替(或除):

var output = mm + '-' + dd + '-' + yyyy + ' : ' + '<span>Website Update</span>'; 

務必:

myEvents[mm + '-' + dd + '-' + yyyy] = '<span>Website Update</span>'; 

你myEvents變量應與日期作爲鍵和事件值的單個對象。

PS:如果你需要使用重複陣列,那麼你可以做一些字符串分割(你原來的版本):

for (var i=0; i<recurring.length; i++) { 
    var split = recurring[i].split(' : '); 
    myEvents[split[0]] = split[1]; 
} 

演示了第二個版本:http://jsbin.com/iSilaPO/1/edit

+0

非常感謝你Tibos。不幸的是,當應用於我的代碼時,它只返回原始的myEvents var。它可能是trhe重複var循環的格式問題? http://jsbin.com/ObEDIWi/1/edit?html,js輸出 – user1189579

+0

對不起,更新的鏈接http://jsbin.com/ObEDIWi/5/edit?html,js輸出 – user1189579

+0

通過一個簡單的5秒調試我可以注意到,問題是您的代碼嘗試構建它之後,循環數組爲空。你的代碼和你原來的版本之間的區別在於,第一個使用'push'將數組正確添加到數組中,並且在第二個中添加屬性給它,就好像它是一個地圖(對象)一樣,所以他們贏得了'當使用'for'進行迭代時會出現。 – Tibos