是否可以将一个数组映射到一个新数组并同时对其进行排序而无需迭代两次(一次用于第一个数组的映射,一次用于第二个数组的排序)?在使用像这样的 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);
但是好像不行。我是不是在如何尝试实现这个问题上偏离了基础,或者只是我的代码有问题?
最佳答案
排序本身通常需要多次迭代。对于一般情况几乎可以肯定是 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);
关于javascript - 在 Javascript 的一次迭代中进行映射和排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2374756/