javascript - 在 Javascript 的一次迭代中进行映射和排序?

标签 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;
    }
    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/

相关文章:

javascript - 仅当屏幕超过 760px 时才调整表格大小

javascript - 通过百分比计算减少对象数组

r - 世界地图 - 将国家的一半映射为不同的颜色

c# - 如何在 C# 中对整数二维数组进行排序

javascript - AJAX 调用并清理 JSON 但语法错误 : missing ; before statement

javascript - 在 Firefox 中使用 ASV 插件时访问 SVG DOM

c++ - 确定 map 是否包含键的值?

c++ - 如何初始化值为结构的类的私有(private)成员静态映射?

sorting - 在 julia 中对每个矩阵列进行排序

javascript - 防止数据表上的默认顺序事件