排序陣列
.sort()
方法對陣列的元素進行排序。預設方法將根據字串 Unicode 程式碼點對陣列進行排序。要以數字方式對陣列進行排序,.sort()
方法需要傳遞一個 compareFunction
。
注意:
.sort()
方法不純。.sort()
將對陣列進行就地排序,即,不是建立原始陣列的排序副本,而是重新排序原始陣列並返回它。
預設排序
按 UNICODE 順序對陣列進行排序。
['s', 't', 'a', 34, 'K', 'o', 'v', 'E', 'r', '2', '4', 'o', 'W', -1, '-4'].sort();
結果是:
[-1, '-4', '2', 34, '4', 'E', 'K', 'W', 'a', 'l', 'o', 'o', 'r', 's', 't', 'v']
注意: 大寫字元已移至小寫字母以上。陣列不按字母順序排列,數字不按數字順序排列。
按字母排序
['s', 't', 'a', 'c', 'K', 'o', 'v', 'E', 'r', 'f', 'l', 'W', '2', '1'].sort((a, b) => {
return a.localeCompare(b);
});
結果是:
['1', '2', 'a', 'c', 'E', 'f', 'K', 'l', 'o', 'r', 's', 't', 'v', 'W']
注意: 如果任何陣列項不是字串,則上述排序將引發錯誤。如果你知道陣列可能包含非字串的專案,請使用下面的安全版本。
['s', 't', 'a', 'c', 'K', 1, 'v', 'E', 'r', 'f', 'l', 'o', 'W'].sort((a, b) => {
return a.toString().localeCompare(b);
});
按長度排序的字串(最長的第一個)
["zebras", "dogs", "elephants", "penguins"].sort(function(a, b) {
return b.length - a.length;
});
結果是
["elephants", "penguins", "zebras", "dogs"];
按長度排序的字串(最短的第一個)
["zebras", "dogs", "elephants", "penguins"].sort(function(a, b) {
return a.length - b.length;
});
結果是
["dogs", "zebras", "penguins", "elephants"];
數字排序(升序)
[100, 1000, 10, 10000, 1].sort(function(a, b) {
return a - b;
});
結果是:
[1, 10, 100, 1000, 10000]
數字排序(降序)
[100, 1000, 10, 10000, 1].sort(function(a, b) {
return b - a;
});
結果是:
[10000, 1000, 100, 10, 1]
按偶數和奇數排序陣列
[10, 21, 4, 15, 7, 99, 0, 12].sort(function(a, b) {
return (a & 1) - (b & 1) || a - b;
});
結果是:
[0, 4, 10, 12, 7, 15, 21, 99]
日期排序(降序)
var dates = [
new Date(2007, 11, 10),
new Date(2014, 2, 21),
new Date(2009, 6, 11),
new Date(2016, 7, 23)
];
dates.sort(function(a, b) {
if (a > b) return -1;
if (a < b) return 1;
return 0;
});
// the date objects can also sort by its difference
// the same way that numbers array is sorting
dates.sort(function(a, b) {
return b-a;
});
結果是:
[
"Tue Aug 23 2016 00:00:00 GMT-0600 (MDT)",
"Fri Mar 21 2014 00:00:00 GMT-0600 (MDT)",
"Sat Jul 11 2009 00:00:00 GMT-0600 (MDT)",
"Mon Dec 10 2007 00:00:00 GMT-0700 (MST)"
]