2013-10-03 41 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