javascript - 在 JavaScript 中合并多个已排序对象数组的最有效方法是什么?

标签 javascript jquery sorting

考虑四个按日期单独排序的对象数组

对象:{ id: userId, date : date }

我应该如何使用 JavaScript 将这些列表按日期排序为一个合并列表?

这是一个 fiddle四个列表分别预先排序。

最佳答案

如果您一定要对传递给您的数组进行排序,我能想到的最有效的方法是制作您自己的合并算法。它会是这样的:

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

这是最快的方法。然而,最简单的编码方法 - 如果您不关心它是最快的 - 就是将四个数组拼接在一起,然后通过您的 activites.sort() 运行它们 函数。

关于javascript - 在 JavaScript 中合并多个已排序对象数组的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19369221/

相关文章:

javascript - 为什么这个 javascript 代码不起作用?

javascript - 单击 addClass 时的 jQuery 缩放

algorithm - 哨兵插入排序

javascript - 倒计时器到特定时间

javascript - 在React-router中拦截/处理浏览器的后退按钮?

javascript - 给定内部 div 动态创建同心 div

javascript - 替换功能只能使用一次(javascript)

jquery - jqGrid - 对数字和文本进行排序

java - ArrayList 的对象排序使用可比较的

inner.html 中的 JavaScript 函数调用