日付ごとに個別に並べ替えられたオブジェクトの 4 つの配列を考えてみましょう
物体:{ id: userId, date : date }
JavaScript を使用して、これらのリストを日付ごとに 1 つの結合リストに並べ替えるにはどうすればよいですか?
これは、個別に事前に並べ替えられた 4 つのリストのフィドルです。
日付ごとに個別に並べ替えられたオブジェクトの 4 つの配列を考えてみましょう
物体:{ id: userId, date : date }
JavaScript を使用して、これらのリストを日付ごとに 1 つの結合リストに並べ替えるにはどうすればよいですか?
これは、個別に事前に並べ替えられた 4 つのリストのフィドルです。
渡された配列が確実にソートされている場合、私が考えることができる最も効率的な方法は、独自のマージ アルゴリズムを作成することです。次のようになります。
var merged = [];
var arrIndex1 = 0;
var arrIndex2 = 0;
var arrIndex3 = 0;
var arrIndex4 = 0;
while (arrIndex1 < arr1.length || arrIndex2 < arr2.length || arrIndex3 < arr3.length || arrIndex4 < arr4.length) {
var val1 = arrIndex1 < arr1.length ? arr1[arrIndex1].date : Number.POSITIVE_INFINITY;
var val2 = arrIndex2 < arr1.length ? arr2[arrIndex2].date : Number.POSITIVE_INFINITY;
var val3 = arrIndex3 < arr1.length ? arr3[arrIndex3].date : Number.POSITIVE_INFINITY;
var val4 = arrIndex4 < arr1.length ? arr4[arrIndex4].date : Number.POSITIVE_INFINITY;
if (val1 < val2 && val1 < val3 && val1 < val4) {
merged.push(arr1[arrIndex1++]);
} else if (val2 < val2 && val1 < val3 && val1 < val4) {
merged.push(arr2[arrIndex2++]);
} else if (val3 < val2 && val1 < val3 && val1 < val4) {
merged.push(arr3[arrIndex3++]);
} else {
merged.push(arr4[arrIndex4++]);
}
}
これが最速の方法です。ただし、それをコーディングする最も簡単な方法 (最速であることに関心がない場合) は、単純にsplice
4 つの配列をまとめて、それらをactivites.sort()
関数で実行することです。