将参数传递给匿名排序函数javascript

时间:2015-01-23 10:19:07

标签: javascript arrays sorting anonymous-function

在用于多维排序的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是新传递的参数。谢谢!

3 个答案:

答案 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()函数不允许将自己的参数(ab除外)传递给它。您可以做的是在.sort()之外声明您的参数,并在.sort()内调用它。

此外,如果您在>内使用.sort()进行比较,它也会对这些词进行排序!

&#13;
&#13;
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;
&#13;
&#13;

答案 2 :(得分:-2)

您可以使用携带:

function sort_func (column, a, b)
{
    return a[column] - b[column];
}
shapes.sort(sort_func.bind(null, column))