1

日付ごとに個別に並べ替えられたオブジェクトの 4 つの配列を考えてみましょう

物体:{ id: userId, date : date }

JavaScript を使用して、これらのリストを日付ごとに 1 つの結合リストに並べ替えるにはどうすればよいですか?

これは、個別に事前に並べ替えられた 4 つのリストのフィドルです。

4

2 に答える 2

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++]); 
     }
}

これが最速の方法です。ただし、それをコーディングする最も簡単な方法 (最速であることに関心がない場合) は、単純にsplice4 つの配列をまとめて、それらをactivites.sort()関数で実行することです。

于 2013-10-14T21:13:03.717 に答える