如何在JavaScript中对数组进行排序?

5
var arr = [];
arr.push(row1);
arr.push(row2);
...
arr.push(rown);

如何按照 row['key'] 进行排序?
4个回答

12

JavaScript数组有一个内置的sort()方法。在这种情况下,可以使用以下类似的方法:

arr.sort( function(row1, row2) {
    var k1 = row1["key"], k2 = row2["key"];
    return (k1 > k2) ? 1 : ( (k2 > k1) ? -1 : 0 );
} );

4

您可以使用比较器调用数组的排序函数。JavaScript比较器只是一个函数,根据a是否小于b、a是否等于b或a是否大于b返回-1、0或1:

myarray.sort(function(a,b){
    if(a < b){
        return -1;
    } else if(a == b){
        return 0;
    } else { // a > b
        return 1;
    }
});

这只是一个示例,您的函数可以基于任何您想要的内容进行比较,但它需要返回-1、0、1。

希望这能有所帮助。


2

以下是一组函数,可用于对数组进行升序、降序或多列排序。

var cmp = function(x, y){ return x > y? 1 : x < y ? -1 : 0; },
    arr =  [{a:0,b:0},{a:2,b:1},{a:1,b:2},{a:2, b:2}];

// sort on column a ascending
arr.sort(function(x, y){
    return cmp( cmp(x.a, y.a), cmp(y.a, x.a) );
});

// sort on column a descending
arr.sort(function(x, y){
    return cmp( -cmp(x.a, y.a), -cmp(y.a, x.a) );
});

// sort on columns a ascending and b descending
arr.sort(function(x, y){
    return cmp([cmp(x.a, y.a), -cmp(x.b, y.b)], [cmp(y.a, x.a), -cmp(y.b,x.b)]);
});

要实现升序排序,请使用"cmp(...)",要实现降序排序,请使用"-cmp(...)"

如果需要对多列进行排序,请比较两个 cmp(...) 数组。


0

请考虑以下代码:

var arr = new Array();

for(var i = 0; i < 10; ++i) {
    var nestedArray = [ "test", Math.random() ];
    arr.push(nestedArray);
}

function sortBySecondField(a, b) {
    var aRandom = a[1];
    var bRandom = b[1];

    return ((aRandom < bRandom) ? -1 : ((aRandom > bRandom) ? 1 : 0));
}

arr.sort(sortBySecondField);

alert(arr);

现在只需要更改一个 sortBySecondField 函数,将比较对象从 a[1] 改为 a['key'],并对 b 做同样的操作即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接