排序陣列

.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)"
]