在用于多维排序的this example中,它使用第一列作为排序列
var shapes = [
[5, "Pentagon"],
[3, "Triangle"],
[8, "Octagon"],
[4, "Rectangle"]
];
shapes.sort(function(a, b)
{
return a[0] - b[0];
});
我想编辑这个匿名函数,所以我可以传递我想要排序的列序号,否则我将不得不为每一列都有不同的排序函数,它会很快变得非常混乱。我已经google了一下,但找不到合适的东西。
粗略猜测我没有它不起作用,但这就是我想要的:
shapes.sort(function(a, b, COL)
{
return a[COL] - b[COL];
});
COL是新传递的参数。谢谢!
答案 0 :(得分:0)
您可以这样做:
function createColumnSort(col){
return function(a, b){
if (a[col] > b[col]) return 1;
if (a[col] < b[col]) return -1;
return 0;
}
}
//Usage:
shapes.sort(createColumnSort(0));
shapes.sort(createColumnSort(1));
答案 1 :(得分:0)
.sort()
函数不允许将自己的参数(a
和b
除外)传递给它。您可以做的是在.sort()
之外声明您的参数,并在.sort()
内调用它。
此外,如果您在>
内使用.sort()
进行比较,它也会对这些词进行排序!
var shapes = [
[5, "Pentagon"],
[3, "Triangle"],
[8, "Octagon"],
[4, "Rectangle"]
];
var col = 1;
shapes.sort(function(a, b)
{
return a[col] > b[col];
});
console.log(shapes);
&#13;
答案 2 :(得分:-2)
您可以使用携带:
function sort_func (column, a, b)
{
return a[column] - b[column];
}
shapes.sort(sort_func.bind(null, column))