如何在从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;
}
}
}
答案 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
,这样您在顶部定义的变量仍然可以在功能。
如果没有,前两个答案中的任何一个都是可行的。