咱們知道在數組排序要如何作呢?在php中是有multi_sort函數可供調用的,可是在js的sort函數其實也提供了參數能夠定義比較函數進行二維數組的排序。php
一、按數值排序數組
假設有以下數組函數
var arr = [[1, 2, 3], [7, 2, 3], [3, 2, 3]];spa
這裏若是咱們要按每一個子數組的第一列來排序要如何作呢,咱們能夠定義一個比較函數:操作系統
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就是按第一 列升序的數組了。code
二、按字符串排序blog
按字符串排序的話呢,咱們能夠利用js提供的localeCompare方法,排序
localeCompare做用:用本地特定的順序來比較兩個字符串。unicode
localeCompare方法的使用規則是stringObject.localeCompare(target),若是 stringObject 小於 target,則 localeCompare() 返回小於 0 的數。若是 stringObject 大於 target,則該方法返回大於 0 的數。若是兩個字符串相等,或根據本地排序規則沒有區別,該方法返回 0,器比較使用的是本地的規則,本地規則意思就是使用操做系統底層對這些本地字符排序的規則進行排序,默認狀況下好比使用大於號這樣的比較只是純粹比較兩 個字符的unicode的數大小,會與不少語言不符。字符串
好比
var arr = [['中', '國'], ['啊', '的'], ['哦', '的']];
arr.sort(function(x, y){
return x[0].localeCompare(y[0]);
});
結果就會按第一列中文字的拼音排序,若是含有英文的話,默認是將英文放在前面,若是是純英文的話,會按字母順序來,大寫排在小寫的後面,這樣就能夠 實現字符串的排序了,包括中文和中英混排。至於要降序排列的話,方法與上面相同,改爲return y[0].localeCompare(x[0]); 便可。
3 <!-- var testArray = new Array(); testArray[0]= new Array('e','2','g'); testArray[1]= new Array('b','3','c'); testArray[2]= new Array('a','1','a'); testArray[3]= new Array('d','4','h'); testArray.sort(sortfunction); alert(testArray[0] + "" + testArray[1] + "" + testArray[2] + "" + testArray[3])// 排序方法中有兩個參數,表示數組中兩個用來排序的元素 // function sortfunction(x,y) { return x[2].charCodeAt(0) - y[2].charCodeAt(0);//根據二維數組的第三列的第一個字母的ASCII碼來降序排序 } // -->