0

我有一个 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:“圣诞节”,12-31-2013:“除夕”}

因为我也有相同类型的重复事件,所以我像这样动态创建它们:

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 重复输出为

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

我需要将循环合并到 myEvents 中,这样当我拉出 myEvents 时,我会得到

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

4

2 回答 2

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

于 2013-10-03T15:26:10.180 回答
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);
于 2013-10-03T15:36:14.830 回答