考虑四个按日期单独排序的对象数组
对象:{ 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/