オブジェクトの配列をソートするためのこのコードがあります。オブジェクト内のデータは、チャネルと時間(時間、分)です。早いものから遅いものまでの時間に基づいたチャネルでソートしたいと思います。
チャネルデータには、次の方法でアクセスします。
channel_array[icount].data[0].hour
channel_array[icount].data[0].minutes
そのdata
オブジェクト配列は次のようになり、すでに並べ替えられています。
[{hour:1, minutes:10},{hour:4, minutes:01}...]
ここで必要なのは、データ配列の最初の要素でチャネルを最も古いものから最も新しいものへと並べ替えること{hour:1, minutes: 10}
です。私はこれを3つのネストされたループで行います。しかし、これは理想的ではありません。並べ替えを行うためのより良い方法はありますか?
var current_time = new Date();
var current_hour = current_time.getHours();
var comp_hour = current_hour - 1;
for (var ih = 0; ih < 24; ih++) {
comp_hour += 1;
if (comp_hour == 24) { comp_hour = 0; }
for (var minutes = 0; minutes < 60; minutes++) {
for (var icount = 0; icount < channel_array.length; icount++) {
if (channel_array[icount].data.length > 0) {
var channel_hour = channel_array[icount].data[0].hour;
var channel_minutes = channel_array[icount].data[0].minutes;
var channel_phase = channel_array[icount].data[0].phase;
var next_day = channel_array[icount].data[0].next_day;
if (channel_phase.toLowerCase() == "pm" && channel_hour != 12) { channel_hour += 12; }
if ( parseInt(channel_hour) == parseInt(comp_hour) && parseInt(channel_minutes) == parseInt(minutes) && next_day != 1 ) {
channel_array_sort.push(channel_array[icount]);
}
}
}
}
}