【问题标题】:Map and Sort in one iteration in Javascript?在Javascript中一次迭代映射和排序?
【发布时间】:2011-01-23 09:41:03
【问题描述】:

是否可以将一个数组映射到一个新数组并同时对其进行排序而无需迭代两次(一次用于第一个数组的映射,一次用于第二个数组的排序)?在使用这样的 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);

但它似乎不起作用。我是如何尝试实现这一点的,还是我的代码有问题?

【问题讨论】:

    标签: javascript map sorting


    【解决方案1】:

    排序本身通常需要不止一次迭代。对于平均情况,几乎可以肯定是 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);
    

    【讨论】:

      猜你喜欢
      • 2021-03-03
      • 2017-12-22
      • 2015-05-26
      • 2015-08-30
      • 1970-01-01
      • 2011-05-29
      • 2021-09-22
      • 2018-04-04
      • 1970-01-01
      相关资源
      最近更新 更多