JS陣列排序

2021-09-22 13:53:31 字數 2024 閱讀 7681

js中使用sort()方法可對陣列進行排序。

如果呼叫sort()方法時沒有使用引數,將按照字元編碼的順序進行排序。要實現這一點,首先應把陣列的元素都轉換成字串(如有必要),以便進行比較。如果想按照其他標準進行排序,就需要提供比較函式,該函式要比較兩個值,然後返回乙個用於說明這兩個值的相對順序的數字。

示例:

var arr = [12,5,7,2,25];

console.log(arr.sort()); //[12, 2, 25, 5, 7]

輸出結果為:

[12, 2, 25, 5, 7]

注意:上面的**沒有按照數值的大小對數字進行排序,要實現這一點,就必須使用乙個排序函式

原因:sort方法會呼叫每個陣列項的tostring()方法,得到字串,然後再對得到的字串進行排序。雖然數值12比2大,但在進行字串比較時"12"則排在"2"前面。此時,需要使用sort()方法的引數,這個引數即為比較函式。

使用比較函式,示例如下:

function sortnumber(a,b)

var arr = [12,5,7,2,25];

console.log(arr);

console.log(arr.sort());

console.log(arr.sort(sortnumber));

aar: [12, 5, 7, 2, 25]

arr.sort(): [12, 2, 25, 5, 7]

arr.sort(sortnumber): [2, 5, 7, 12, 25]

如果陣列項是物件,需要根據陣列項的某個屬性對陣列進行排序時,則和使用比較函式類似。

2.1 根據陣列物件確定屬性排序

示例:

var students = [,,

];對 students的成績進行排序,此時需增加如下函式:

var compare_old = function (student1, student2) else if (val1 > val2) else

}console.log(students.sort(compare_old ));

列印結果:

0: 1:

2:

注意:若成績是字串時,此時排序會失效。如下

var students = [,,];

console.log(students.sort(compare));

列印結果:

0: 1:

2:

此時應將字串轉換為數字再排序即可。

錯誤原因:兩個數字字串比較大小時,會比較它們的ascii值大小,小的在前。比較規則是:從第乙個字元開始,順次向後直到出現不同的字元為止,然後以第乙個不同的字元的ascii值確定大小。

2.2 根據陣列物件靈活排序

上述排序方法只可根據物件中的某一指定屬性排序,如 students 中只可根據 score 屬性排序,若也需根據 id 或者 name 排序該如何解決?改造 compare 方法即可。如下:

var students = [,,];

var compare_new = function (porp) else if (val1 > val2) else }}

console.log(students.sort(compare_new ('name')));

列印結果:

0: 1:

2: console.log(students.sort(compare_new ('id')));

列印結果:

0: 1:

2:

JS陣列排序

function bubblesort array return array vararray1 2,5,1,9 bubblesort array1 1,2,5,9 function usesort array var array1 2,5,1,9 usesort array1 在資料集中,選擇乙個...

js 陣列排序

var array 1,4,8,3,6,12,9,8 function compare val1,val2 array.sort compare document.write array sort 方法按照公升序排列陣列項,會呼叫每個陣列項的tostring 轉型方法,然後比較得到的字串。tostr...

JS陣列排序

用陣列的排序 sort 方法.但sort 方法本身是按ascii字元 從小到大排列的.所以說,如果是數字的話,會出現下面這種情況 var arr 3,32,3,5 arr.sort alert arr.tostring 輸出 2,3,32,5 但是 sort 方法可以接收乙個引數,就是乙個比較函式 ...