在JavaScript中,數(shù)組排序有兩種常用方法:sort()
方法和Array.prototype.sort()
方法。
sort()
方法:該方法是用于對(duì)數(shù)組的元素進(jìn)行排序的。默認(rèn)情況下,它會(huì)將數(shù)組元素轉(zhuǎn)換為字符串并按照字符順序進(jìn)行排序。如果需要按照其他規(guī)則進(jìn)行排序,可以將一個(gè)比較函數(shù)作為參數(shù)傳遞給sort()
方法。比較函數(shù)應(yīng)該返回一個(gè)負(fù)數(shù)、零或正數(shù),來表示 a 應(yīng)該被放置在 b 的前面、兩者排序無關(guān)或放置在 b 的后面。示例代碼:
const arr = [3, 1, 4, 1, 5, 9];
arr.sort(); // 默認(rèn)按照字符串順序排序:[1, 1, 3, 4, 5, 9]
const arr2 = ['apple', 'banana', 'orange'];
arr2.sort(); // 默認(rèn)按照字符串順序排序:['apple', 'banana', 'orange']
const arr3 = [3, 1, 4, 1, 5, 9];
arr3.sort((a, b) => a - b); // 按照數(shù)字大小排序:[1, 1, 3, 4, 5, 9]
Array.prototype.sort()
方法:該方法是ES6中引入的一種新的數(shù)組排序方法,它允許在數(shù)組的原型上添加自定義的排序函數(shù)。這個(gè)方法的基本語法和sort()
方法相同,只不過它是在數(shù)組的原型上定義的,因此所有的數(shù)組都可以使用這個(gè)方法。示例代碼:
Array.prototype.mySort = function(compareFn) {
const arrCopy = [...this];
return arrCopy.sort(compareFn);
};
const arr = [3, 1, 4, 1, 5, 9];
const sortedArr = arr.mySort((a, b) => a - b); // 使用自定義的比較函數(shù)進(jìn)行排序:[1, 1, 3, 4, 5, 9]
需要注意的是,在使用Array.prototype.sort()
方法時(shí),會(huì)修改原數(shù)組,而不是創(chuàng)建一個(gè)新的排序后的數(shù)組。因此,如果需要保留原數(shù)組的順序,可以先使用slice()
方法創(chuàng)建一個(gè)數(shù)組的副本,然后對(duì)副本進(jìn)行排序。