JS (JavaScript) 中数组 Array.sort 排序
JavaScript中数组的sort()方法主要用于对数组的元素进行排序
- 原理
arr.sort((m, u) => { ... return (number) }
sort 的参数接收一个函数 或者 可以不传参
不传参数的情况,也就是默认排序顺序是根据字符串Unicode码点
sort内的函数 返回值小于0, m排在u前面; 返回值等于 0, m,u相等顺序不变; 返回值大于 0, m排在u后面 - 数值排序
//升序
var arr = [1, 2, 3, 11, 12, 4, 1, 3, 10];
// var newArr = arr.sort((m,u)=>{return u - m});
// 或者下边这种写法都可以
var newArr = arr.sort(num);
console.log(newArr); // [1, 1, 2, 3, 3, 4, 10, 11, 12]
function num (m,u){
return m - u;
}
//降序
var arr = [1, 2, 3, 11, 12, 4, 1, 3, 10];
// var newArr = arr.sort((m,u)=>{return u - m});
// 或者下边这种写法都可以
var newArr = arr.sort(num);
console.log(newArr); // [1, 1, 2, 3, 3, 4, 10, 11, 12]
function num (m,u){
return u- m;
}
- 字符串排序
// 对字符串数组执行不区分大小写的字母表排序
// 字符串的数字 或者字母 是同位置的字符的码点相比较 当前位置码点相等 继续下一位置比较 直到得出不同或结束
// 所以 '120' 和 '1190' '120' 比 '1190' 排后面
var arr = ['a', 'Ar', 'c', 'd', 'E', 'Fs', '120', '1190', 'ee'];
var newArr = arr.sort(num);
console.log(newArr);
// 输出 ['1190', '120', 'a', 'Ar', 'c', 'd', 'E', 'ee', 'Fs']
function num (m,u){
var a = m.toLowerCase();
var b = u.toLowerCase();
if (a < b) return -1;
if (a > b) return 1;
return 0;
}
- 随机排序
// 随机排序
var arr = [2, 7, 2, 55, 66, 33, 2, 36, 8];
var newArr = arr.sort(num);
console.log(newArr);
// 输出 [7, 33, 36, 55, 8, 66, 2, 2, 2]
function num (m,u){
return Math.random() < 0.5 ? 1 : -1;
}
- 数组元素 是对象的 根据身高排序
// 身高排序
var arr = [
{name:'张三',height:160,heightUnit:'cm'},
{name:'王五',height:180,heightUnit:'cm'},
{name:'李四',height:170,heightUnit:'cm'},
];
var newArr = arr.sort(num);
console.log(newArr);
function num (m,u){
return m.height - u.height
}
//也可以这么写
var arr = [
{name:'张三',height:160,heightUnit:'cm'},
{name:'王五',height:180,heightUnit:'cm'},
{name:'李6',height:170,heightUnit:'cm'},
{name:'李7',height:161,heightUnit:'cm'},
{name:'李8',height:155,heightUnit:'cm'},
{name:'李9',height:130,heightUnit:'cm'},
{name:'李4',height:110,heightUnit:'cm'},
];
var newArr = arr.sort(compare('height'));
console.log(newArr);
function compare(property){
return function(m,u){
var m = m[property];
var u = u[property];
return m - u;
}
}