0

Angular.js と Chrome 拡張機能を使用して、職場でタイムシートを自動化するのに役立つ基本的なカレンダーを作成しようとしていますが、今のところ、この部分で立ち往生しています。

以下に 2 つの配列があります。pastTwoWeeksこれは、今日から 14 日前の日付のリストとentries、API から取得されたタイムシートです。これらは実際には多くのプロパティを持つオブジェクトですが、今のところ単純な日付を使用しています。

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

私が達成したいこと:

  • 2013/10/15
  • 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

等...

4

2 に答える 2

2

ここにjsfiddleがあります、私は正しい軌道に乗っていますか?

あまり。

calander[key] = {};

ここでは、オブジェクトではなく、エントリの配列が必要だと思います。

calander[key][entry];

これは何もしません。プロパティを作成しようとしている場合は、それに割り当てる必要があります。また、すべてentryの は a に対して同じであるためkey、1 つの同じプロパティのみを上書きします。.push()配列の方が良い。

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

それはかなり非効率的です。ループを次々に実行することでより適切に実行でき、entry以前calenderpastTwoWeeks.

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 に答える