最簡單的二維數組排序
代碼如下 |
複製代碼 |
<script type="text/javascript"> var aa =[["a",3],["b",4],["c",2],["d",1]]; alert(aa.sort(function(x,y){return x[1]-y[1]})) </script> |
支援中文排序
比如
代碼如下 |
複製代碼 |
var arr = [['中', '國'], ['啊', '的'], ['哦', '的']]; arr.sort(function(x, y){ return x[0].localeCompare(y[0]); }); |
結果就會按第一列中文字的拼音排序,如果含有英文的話,預設是將英文放在前面,如果是純英文的話,會按字母順序來,大寫排在小寫後面,這樣就可以實現字串的排序了,包括中文和中英混排。至於要降序排列的話,方法與上面相同,改成return y[0].localeCompare(x[0]); 即可。
可以達到我們的效果了,但是如果我想指定一個欄位來進行排序呢,其它要不要排序就一個內容的需要排序,下面我自定了一個數組排序函數。
代碼如下 |
複製代碼 |
function listSortBy(arr, field, order){ var refer = [], result=[], order = order=='asc'?'asc':'desc', index; for(i=0; i<arr.length; i++){ refer[i] = arr[i][field]+':'+i; } refer.sort(); if(order=='desc') refer.reverse(); for(i=0;i<refer.length;i++){ index = refer[i].split(':')[1]; result[i] = arr[index]; } return result; } 測試方法 var a = [ {name:'hdj', age:28}, {name:'yim', age:25}, {name:'hdq', age:26} ]; a = listSortBy(a, 'age', 'desc'); /* 結果: {name:'hdj', age:28}, {name:'hdq', age:26}, {name:'yim', age:25} */ |