用Javascript在一次迭代中映射和排序?
是否可以将一个数组映射到一个新数组,同时对其进行排序,而无需迭代两次(第一个数组上的映射一次,第二个数组上的排序一次)?在使用map方法时,我一直尝试使用匿名函数对其进行排序,如下所示:用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; }
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(顺序);