0

我正在尝试制作一个基本日历,以帮助使用 Angular.js 和 Chrome 扩展在工作中自动化时间表,但现在我被困在这部分。

您可以在下面看到两个数组:pastTwoWeeks这是从今天开始 14 天的日期列表和entries从 API 检索的 Timesheet - 这些实际上是具有许多属性的对象,但现在我只是使用一个简单的日期。

这是一个jsfiddle,我在正确的轨道上吗?谢谢 http://jsfiddle.net/v599n/

var pastTwoWeeks = ['15/10/2013', '14/10/2013', '13/10/2013', 
    '12/10/2013', '11/10/2013', '10/10/2013', 
    '09/10/2013', '08/10/2013', '07/10/2013', 
    '06/10/2013', '05/10/2013', '04/10/2013', 
    '03/10/2013', '02/10/2013'];

var entries = ['11/10/2013', '11/10/2013', '11/10/2013', 
    '11/10/2013', '10/10/2013', '10/10/2013', '10/10/2013', 
    '09/10/2013', '09/10/2013', '09/10/2013', '08/10/2013', 
    '08/10/2013', '07/10/2013', '07/10/2013', '04/10/2013', 
    '04/10/2013', '03/10/2013', '03/10/2013', '02/10/2013', 
    '02/10/2013', '02/10/2013', '02/10/2013', '01/10/2013',
        '01/10/2013', '01/10/2013'];

var calander = {};

for(var j=0; j< pastTwoWeeks.length; j++) {   
    var key = pastTwoWeeks[j];
    if (key in calander == false) {
        calander[key] = {};
    }

    for(var i = 0; i< entries.length; i++) {
        var entry = entries[i];
        if(entry === key){
            calander[key][entry];
            console.log(key + " " + entry);
        }
    }
}

我想要达到的目标:

  • 15/10/2013
  • 2013 年 10 月 14 日
  • 2013 年 10 月 13 日
  • 2013 年 12 月 10 日
  • 2013 年 11 月 10 日(4 个条目)
    • 2013 年 11 月 10 日
    • 2013 年 11 月 10 日
    • 2013 年 11 月 10 日
    • 2013 年 11 月 10 日

ETC...

4

2 回答 2

2

这是一个jsfiddle,我在正确的轨道上吗?

并不真地。

calander[key] = {};

我认为你宁愿在这里想要一个条目数组,而不是一个对象。

calander[key][entry];

这没有任何作用。如果您尝试创建一个属性,则需要分配给它。此外,由于 a 的所有entrys 都是相同的key,因此您只会覆盖一个相同的属性。最好.push()是一个数组。

for(var j=0; j< pastTwoWeeks.length; j++) {   
    for(var i = 0; i< entries.length; i++) {
        if(entry === key)

那是相当低效的。您可以通过一个接一个地执行循环来做得更好,只需检查您是否entry存在作为您calender之前填充的键pastTwoWeeks

var calendar = {};
for (var i=0; i<pastTwoWeeks.length; i++) {
    var key = pastTwoWeeks[i];
    calendar[key] = [];
}
for (var i=0; i<entries.length; i++) {
    var entry = entries[i],
        key = entry; // this might change for more complex objects
    if (key in calendar) {
       calendar[key].push(entry);
       console.log(entry+" added to calendar at " + key);
    }
}
于 2013-10-15T21:30:02.403 回答
1

像这样的东西应该可以满足您的需求:

var pastTwoWeeks = ['15/10/2013', '14/10/2013', '13/10/2013', '03/10/2013', '02/10/2013'];
var entries = ['11/10/2013', '11/10/2013', '11/10/2013', '01/10/2013', '01/10/2013'];
var calander = {};

pastTwoWeeks.forEach(function(date) {
    calander[date] = [];
});

entries.forEach(function(date) {
    if (calander[date] === undefined) calander[date] = [];
    calander[date].push(date);
});
于 2013-10-15T21:27:00.037 回答