在 Javascript 中的一次迭代中映射和排序?

Yan*_*sky 8 javascript sorting map

是否可以将数组映射到新数组并同时对其进行排序而无需迭代两次(一次用于第一个数组上的映射,一次用于第二个数组上的排序)?在使用这样的 map 方法时,我一直在尝试使用匿名函数对其进行排序:

var arr=[4,2,20,44,6];
var arr2=arr.map(function(item, index, array){
    if(index==array.length-1 || item==array[index+1]){
        return item;
    }
    else if((item-array[index+1])<0){
        return item;
    }
    else if((item-array[index+1])>0){
        return array[index+1];
    }
});
console.log(arr2);
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用。我在尝试实现这一点的方式上偏离了基础,还是我的代码有问题?

Mat*_*ley 10

排序本身通常需要不止一次迭代。对于平均情况,几乎可以肯定是 O(n log n)(ECMAScript 未指定算法,但这是您可以使用比较排序做的最好的结果),因此同时执行这两个操作没有多大意义。

您可以将它们链接到一个表达式中,因为sort返回数组本身:

function order(a, b) {
    return a < b ? -1 : (a > b ? 1 : 0);
}
var arr2 = arr.map(function(item) { ... }).sort(order);
Run Code Online (Sandbox Code Playgroud)