如何在从sort方法

时间:2016-04-14 12:04:22

标签: javascript callback

如何在从arrayobj.sort(sortFunction) 方法调用它时将参数传递给回调方法。我想将“sortOrder”传递给“Compare”,以便对其进行加法或解除。

var sortOrder = "asc";
var a = new Array(4, 11, 2, 10, 3, 1);
b = a.sort(Compare);   // how to pass "sortOrder" here

// Sorts array elements in ascending order numerically.
function Compare(first, second, sortOrder) // here sortOrder require 
{
    if(sortOrder == "asc"){
        if (first == second)
            return 0;
        if (first < second)
            return -1;
        else
            return 1; 
        }
    else{
        if (first == second)
            return 0;
        if (first < second)
            return 1;
        else
            return -1; 
        }


    }
}

3 个答案:

答案 0 :(得分:1)

试试这种方式

替换

b = a.sort(Compare);

b = a.sort(function(a,b){
  return Compare(a, b, sortOrder);
});

样本

var sortOrder = "asc";
var a = new Array(4, 11, 2, 10, 3, 1);
b = a.sort(function(a,b){
  return Compare(a, b, sortOrder);
});

document.body.innerHTML += JSON.stringify(b,0,4);

function Compare(first, second, sortOrder) // here sortOrder require
{
    if(sortOrder == "asc"){
        if (first == second)
            return 0;
        if (first < second)
            return -1;
        else
            return 1; 
        }
    else{
        if (first == second)
            return 0;
        if (first < second)
            return 1;
        else
            return -1; 
        }


    }

答案 1 :(得分:1)

此解决方案返回所选排序顺序的函数。如果未指定顺序,则使用asc的函数。

function getComparer(sortOrder) {
    return sortOrder === 'desc' ?
        function (a, b) { return b - a; } :
        function (a, b) { return a - b; };
}

var a = new Array(4, 11, 2, 10, 3, 1);

a.sort(getComparer());
document.write('<pre> ' + JSON.stringify(a, 0, 4) + '</pre>');
a.sort(getComparer('desc'));
document.write('<pre> ' + JSON.stringify(a, 0, 4) + '</pre>');

答案 2 :(得分:0)

如果代码的唯一用途是您在此处发布的代码,则只需从参数列表中删除sortOrder,这样您在顶部定义的变量仍然可以在功能。

如果没有,前两个答案中的任何一个都是可行的。