Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Javascript在一次迭代中映射和排序?_Javascript_Map_Sorting - Fatal编程技术网

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

用Javascript在一次迭代中映射和排序?,javascript,map,sorting,Javascript,Map,Sorting,是否可以将一个数组映射到一个新数组,同时对其进行排序,而无需迭代两次(第一个数组上的映射一次,第二个数组上的排序一次)?在使用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; }

是否可以将一个数组映射到一个新数组,同时对其进行排序,而无需迭代两次(第一个数组上的映射一次,第二个数组上的排序一次)?在使用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);
var-arr=[4,2,20,44,6];
var arr2=arr.map(函数(项、索引、数组){
if(index==array.length-1 | | item==array[index+1]){
退货项目;
}
else if((项数组[index+1])0){
返回数组[index+1];
}
});
控制台日志(arr2);

但它似乎不起作用。我是不是在试图实现这一点的过程中偏离了基准,还是我的代码有问题?

排序通常需要多次迭代。对于平均情况,几乎可以肯定是O(n logn)(算法不是由ECMAScript指定的,但这是使用比较排序所能做的最好的),因此同时执行这两种操作没有多大意义

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

function order(a, b) {
    return a < b ? -1 : (a > b ? 1 : 0);
}
var arr2 = arr.map(function(item) { ... }).sort(order);
功能顺序(a、b){
返回ab-1:0);
}
var arr2=arr.map(函数(项){…}).sort(顺序);