4

他にも質問があり、フィルター機能を試しましたが、正しく使っているかわかりません。

基本的に、次のようなオブジェクトの配列があります。

[{"hour":"6 am", "date":"2012-12-01"},{"hour":"7 am", "date":"2012-12-01"}]

私は設定された日数をループしており、毎日午前6時から午後9時までの時間をループしています。時間(その特定の日付の時間のように)が上記の配列に存在する場合。新しいオブジェクトで使用可能としてマークし、それを新しい配列に渡します。以下は私が現在使用しているコードです。

for(var i = 0; i < dayCount; i++){//Loop through the days that exist in the schedule
    day = new Object();
    day.date = Date.parse(startDate).add(i).days();
    day.dayName = weekday[day.date.getDay()]
    day.hours = new Array();
    for(var j = 6; j < 22; j++){ //Loop through hours of the day seeing if they're available/scheduled, etc.
        if(j<=12){
            thisHour = j +' am';
        } else{
            thisHour = j-12 + ' pm';        
        }
        var thisIsAvailable = $(assignedHours).filter(function(){
                return assignedHours.hour == thisHour && assignedHours.date == day.date.toString("yyyy-MM-dd");
            });
        var thisIsScheduled = 0;
        day.hours.push({hour: thisHour,available: thisIsAvailable, scheduled: thisIsScheduled});
    }
daysInSchedule.push(day);
}   

いくつかのメモ。day.dateプロパティで.toString()を使用します。これは、JS日付形式でフォーマットされており、比較する値がMYSQL日付形式であるためです。thisIsAvailable.lengthに警告(古い学校のデバッグについて話します)しましたが、毎回0になります。どんなアイデアでも大歓迎です。ありがとう!

編集:私はあなたに非常に重要なことをすべて伝えるのを忘れていることに気づきました。私が提供する配列は、assignedHoursという名前の変数に含まれています。それを省いてすみません。

編集2:明確にするために、私の質問は2つのコードの抜粋の間のビットにあります。指定された配列内のオブジェクトの1つが、ループ内の曜日と時間、および実行中のネストされたループと一致するかどうかを確認しようとしています。もしそうなら、それを新しいオブジェクトに渡したいのですが、それをその日の時間配列にプッシュします。そうでない場合でも、オブジェクトを渡しますが、使用可能な値は0です。

4

2 に答える 2

3

filter問題は、jQueryのメソッドを使用している方法にあると思われます。

var thisIsAvailable = $(assignedHours).filter(function(){
    return assignedHours.hour == thisHour && assignedHours.date == day.date.toString("yyyy-MM-dd");
});

私が間違っていない場合は、常に配列assignedHours.hourを参照するため、常に未定義になりますassignedHours(フィルタリングしている現在の要素、つまり内部 assignedHoursの要素を参照する場合)。

あなたはおそらくこのようなことをしたいと思うでしょう:

var thisIsAvailable = $(assignedHours).filter(function(array_key){
    return this.hour == thisHour && this.date == day.date.toString("yyyy-MM-dd");
});

Edit1: @Kevin Bが指摘しているよう$.grepに、配列の周りにDOMラッパーを作成しないため、配列のフィルタリングに適しています。

$.grep(assignedHours, function(el) {
    return el.hour == thisHour && el.date == day.date.toString("yyyy-MM-dd");
});
于 2012-11-01T14:28:06.487 に答える
2

OPの要求に応じて、コメントから回答に昇格しました。

フィルタ機能をチェックthis.hourしてチェックする必要があります。this.date

于 2012-11-01T14:30:12.197 に答える