如何根据日期进行合并排序



我修改了合并排序,以根据createdAt日期对象进行排序。结果,我只得到了一个有10个元素的数组,然而,起始数组有大约10000个元素。为什么会发生这种情况?我该如何解决这个问题?问题是否源于数组中的重复项?我还尝试过提取resultArray并将其作为参数添加到数组中,在这种情况下,我只得到了一个大约1000个元素的数组。这里的代码合并排序:

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);
},
)

mergeSort:中存在两个问题

  • /运算符不执行integer除法,因此结果可能是非整数,这与数组索引不兼容。更正为:

    const half = array.length >> 1; // Integer division by 2.
    
  • splice会更改使用此方法的数组:它会从数组中删除这些条目。这意味着,第二次调用splice时,将得到一个空数组或最多一个元素。而是使用slice

相关内容

  • 没有找到相关文章

最新更新