2010-02-02 79 views

Trả lời

11

Mảng JavaScript có phương thức được xây dựng trong sort(). Trong trường hợp này, một số thông tin như sau sẽ hoạt động:

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

Bạn gọi hàm sắp xếp của một mảng với bộ so sánh của bạn. Một so sánh JavaScript chỉ là một hàm trả về -1, 0, hoặc 1 tùy thuộc vào việc a nhỏ hơn b, a bằng b, hoặc a lớn hơn b:

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

Đây chỉ là một ví dụ , chức năng của bạn có thể căn cứ so sánh trên bất cứ điều gì bạn muốn, nhưng nó cần phải trả về -1,0,1.

Hy vọng điều này sẽ hữu ích.

0

Xét đoạn mã sau:

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); 

Bây giờ chỉ cần thay đổi một chức năng sortBySecondField để so sánh a['key'] thay vì a[1] và làm tương tự cho b.

2

Đây là tập hợp các hàm nếu bạn muốn sắp xếp tăng dần, giảm dần hoặc sắp xếp trên nhiều cột trong một mảng.

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)]); 
}); 

Để có được một sắp xếp tăng dần, sử dụng "CMP (...)", và để có được một loại giảm dần, sử dụng "-cmp (...)"

Và để sắp xếp trên nhiều cột , so sánh hai mảng cmp (...)

Các vấn đề liên quan