排序数组
.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)"
]