sort排序问题
首先, 我们定义一个number 数组, 里面装了15个数, 但我们把它 reverse 后再sort 发现顺序并不是我们想象的那样 从1~15
Tips : sortNumber.sort 之后自身也会更改的
let sortNumbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
console.log(sortNumbers.reverse().sort();
虽然表面上看着顺序很乱, 其实这也是有规律的, 先是 ‘1’开头 然后是‘2’开头 。所以 sort在对数组进行排序的时候, 是把元素默认成字符串进行相互比较的
但是 如果我们真的要让数组中的数字进行对比该怎么办?
这时 需要我们在sort函数里面添加自己的自定义:
let sortNumbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
console.log(sortNumbers.reverse().sort((a, b) => a - b)); // 反过来就是降序
在b>a时, 返回负数, 反之返回正数。 如果相等的话就会返回0。所以 sort函数就会根据这些返回值的情况对数组进行排序。
当然我们也可以自定义对某一属性排序
就是在 sort ()里面添加自己写的函数
const friends = [
{name: 'jason', age: 30},
{name: 'timmy', age: 20},
{name: 'robert', age: 10}, // ES2017 允许在结尾逗号
];
function comparePerson(a, b){
if (a.age < b.age){
return -1;
}
if(a.age > b.age){
return 1;
}
return 0;
}
console.log(friends.sort(comparePerson)); // 注意这个 调用func 是不加 () 的
所以 这个排序非常的自由, 可以自己在方法中相比什么就写什么