如何将数组变量合并到对象数组中?

时间:2013-10-03 15:19:43

标签: javascript jquery

我有一个var对象,可以在日历上显示事件。

这是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>'};

Var myEvents输出为

对象{10-02-2013:“Event1”,10-04-2013:“Event2”,12-25-2013:“圣诞节”,2013年3月12日:“新年前夜” }

由于我也有相同类型的重复事件,我会像这样动态创建它们:

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);
}

var recurring outputs as

[“2013年10月10日:网站更新”,“10-10-2013:网站更新”,“2013年10月17日:网站更新”,“10-24-2013:网站更新” ,“10-31-2013:网站更新”,“11-07-2013:网站更新”,“2013年11月14日:网站更新”,“2013年11月21日:网站更新”,“11-28- 2013:网站更新“,”12-05-2013:网站更新“,”12-12-2013:网站更新“,”2013年12月19日:网站更新“,”2013年12月26日:网站更新“]

我需要将重复合并到myEvents中,这样当我拉出myEvents时我得到了

对象{10-02-2013:“Event1”,10-04-2013:“Event2”,12-25-2013:“圣诞节”,2013年3月12日:“新年前夜” ,10-03-2013:“网站更新”,10-10-2013:“网站更新”,2013年10月17日:“网站更新”,2013年10月24日:“网站更新”,2013年10月31日:“网站更新”,11-07-2013:“网站更新”,2013年11月14日:“网站更新”,2013年11月21日:“网站更新”,2013年11月28日:“网站更新”, 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中。 我怎样才能做到这一点?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);