一、按數值排序
var arr = [[1, 2, 3], [7, 2, 3], [3, 2, 3]];
arr.sort(function(x, y){
return x[0] – y[0];
});
其實是數組依次將數組元素復制給x,y,比如首先將arr[0]賦給x,arr[1]賦給y,然后用x[0] – y[0],根據返回的值,
如果返回的是大於0的數,那么就把數組中x放到y的后面,
如果返回的是0則不變,
如果小於0則將x放到y的前面,
然后第一個排序好之后在進行下面兩個的排序,直到整個數組排序完成。
這是默認升序的比較函數,如果要降序排列則只需修改比較方式,改為 return y[0] – x[0] 即可,
這里我們x[0]表示是按第一列進行排序,我們這里也可以按其他列進行排序。這里的排序默認就會修改arr的數組結構,所以排序完arr就是按第一列升序的數組了。
二、按字符串排序
var arr = [['中','國'], ['啊','的'], ['哦','的']];
arr.sort(function(x, y){
return x[0].localeCompare(y[0]);
});
localeCompare作用:用本地特定的順序來比較兩個字符串。
localeCompare方法的使用規則是stringObject.localeCompare(target),
如果 stringObject 小於 target,則 localeCompare() 返回小於 0 的數,將x放到y的前面,
如果 stringObject 大於 target,則該方法返回大於 0 的數,就把數組中x放到y的后面,。
如果兩個字符串相等,或根據本地排序規則沒有區別,該方法返回 0,則不變,
其比較使用的是本地的規則,本地規則意思就是使用操作系統底層對這些本地字符排序的規則進行排序,默認情況下比如使用大於號這樣的比較只是純粹比較兩個字符的unicode的數大小,會與很多語言不符。
結果就會按第一列中文字的拼音排序,如果含有英文的話,默認是將英文放在前面,如果是純英文的話,會按字母順序來,大寫排在小寫的后面,這樣就可以實現字符串的排序了,包括中文和中英混排。至於要降序排列的話,方法與上面相同,改成return y[0].localeCompare(x[0]); 即可。