Array.prototype.sort()
sort()
方法用原地算法对数组的元素进行排序,并返回数组。
const months = ['March', 'Jan', 'Feb', 'Dec'];
months.sort();
console.log(months);
// expected output: Array ["Dec", "Feb", "Jan", "March"]
const array1 = [1, 30, 4, 21, 100000];
array1.sort();
console.log(array1);
// expected output: Array [1, 100000, 21, 30, 4]
arr.sort([compareFunction])
该方法传入一个用来进行排序的函数。如果省略,元素按照转换为的字符串的各个字符的Unicode位
compareFunction
参数:
-
fierstEl
第一个用来比较的元素
-
secondEl
第二个用来比较的元素
返回值:排序后的数组
如果传了 compareFunction
,那么数组会按照调用该函数的返回值排序。即 a 和 b 是两个将要被比较的元素:
-
如果
compareFunction(a, b)
return 的结果小于 0 ,那么 a 会被排列到 b 之前; -
如果
compareFunction(a, b)
return 的结果等于 0 , a 和 b 的相对位置不变。 -
如果
compareFunction(a, b)
return 的结果大于 0 , b 会被排列到 a 之前。
如下,比较函数格式示例:
var items = [
{ name: 'Edward', value: 21 },
{ name: 'Sharpe', value: 37 },
{ name: 'And', value: 45 },
{ name: 'The', value: -12 },
{ name: 'Magnetic' },
{ name: 'Zeros', value: 37 }
];
// 按名字进行降序操作
items.sort(function(a, b) {
var nameA = a.name.toUpperCase(); // 全部转为大写进行比较
var nameB = b.name.toUpperCase();
if (nameA < nameB) { //如果 nameA 小于 B 则位置不比变
return -1;
}
if (nameA > nameB) { // 如果name A 大于 B 则B 与 A 交换位置
return 1;
}
// 名字相同时 不变
return 0;
});
// 按对象的值进行降序
items.sort(function (a, b) {
return (a.value - b.value)
});
要比较数字而非字符串,比较函数可以简单的以 a 减 b,如下的函数将会将数组升序排列(降序则为 b 减 a)
var numbers = [4, 2, 5, 1, 3];
// 若 a 小于 b,即 a - b 小于零,则返回一个小于零的值,数组将按照升序排列。
// 一开始 4-2 =2 大于0 随后 b 往前 a往后,4 - 5 = -1 小于零,则 a 往前,b 往后一直按升序排序
numbers.sort((a, b) => a - b);
console.log(numbers);
// [1, 2, 3, 4, 5]
// 遇到小的数(b) 减去 大的数(a) 不会变位置 b-a 小于0 (a,b)位置不变
// 遇到大的数(b) 减去 小的数(a) b-a 大于0 ,(a,b) 大的往前放,小往后,最后成降序排序
numbers.sort((a, b) => b - a);
console.log(numbers);