我將合并排序修改為根據 createdAt 日期物件進行排序。結果,我只得到了一個包含 10 個元素的陣列,但是,起始陣列大約有 10000 個元素。為什么會這樣?我該如何解決這個問題?問題是否源于陣列中的重復項?我也嘗試過提取 resultArray 并將其作為引數添加到陣列中,在這種情況下,我只得到了一個大約 1000 個元素的陣列。這里是mergeSort的代碼:
function merge(left, right, sorter,) {
let result=[],leftIndex = 0,
rightIndex = 0;
// We will concatenate values into the resultArray in order
while (leftIndex < left.length && rightIndex < right.length) {
if (sorter(left[leftIndex], right[rightIndex])) {
result.push(left[leftIndex]);
leftIndex ; // move left array cursor
} else {
result.push(right[rightIndex]);
rightIndex ; // move right array cursor
}
}
return result.concat(left.slice(leftIndex)).concat(right.slice(rightIndex));
};
function mergeSort(array, sorter = (num1, num2) => num1 < num2, ) {
const half = array.length / 2;
// Base case or terminating case
if (array.length < 2) {
return array;
}
const left = array.splice(0, half);
const right = array.splice(half);
return merge(
mergeSort(left, sorter, ),
mergeSort(right, sorter, ),
sorter,
);
}
這就是我所說的,我將排序方法作為引數提供,該方法檢查哪個日期在另一個日期之前:
const sortedArr = mergeSort(
res,
(obj1, obj2) => {
return new Date(obj1.createdAt) < new Date(obj2.createdAt);
},
)
uj5u.com熱心網友回復:
有兩個問題mergeSort:
/運算子不執行整數除法,因此結果可能是非整數,這與陣列索引不能很好地配合。更正為:const half = array.length >> 1; // Integer division by 2.splice改變您使用此方法的陣列:它從陣列中洗掉這些條目。這意味著,您第二次呼叫 時splice,您將獲得一個空陣列或最多一個元素。而是使用slice.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/510091.html
上一篇:在C中的二維陣列中搜索字母
