问题描述:如何对数组arr = [ 10, 20, 1, 2 ]使用sort方法进行排序?
注意不要与JAVA中的Arrays.sort()方法混淆,js中的sort方法+compareTo(即比较元素之间大小关系)≈JAVA的sort()。
在js中直接使用arr.sort()并得不出正确结果,所以要先对sort()函数进行元素排序的规则进行了解。
1.sort排序规则
(1)对于字符串排序,以ASCII码顺序为依据进行排序,所以比较顺序大写单词排在小写之前。
eg:

(2)对于数字的排序,sort方法会先将其转为string类型再进行比较,所以也是以ASCII码为依据进行排序。
(3)sort方法直接对原数组进行修改。
eg:

知道以上规则,且基于数组的sort方法为高阶函数,所以可以通过自定义方法先对数组进行一轮比较,再调用sort方法,即
arr.sort(function(x,y){
//规则重写
})
2.sort使用方法
(1)对字符串进行排序
将字符串全部转换为大写/小写,再比较。
var arr = [ APP , A , Math , b ];
arr.sort(function (s1, s2) {
x1 = s1.toUpperCase();
x2 = s2.toUpperCase();
if (x1 < x2) {
return -1;
}
if (x1 > x2) {
return 1;
}
return 0;
});
console.log(arr)// [ A , APP , b , Math ]
(2)对数字进行排序
直接比较大小。
var arr = [10, 20, 1, 2];
//方法一
arr.sort(function (x, y) {
if (x < y) {
return -1;
}
if (x > y) {
return 1;
}
return 0;
});
console.log(arr); // [1, 2, 10, 20]
//方法二:箭头函数
console.log(arr.sort((x,y)=>(x-y))); // [1, 2, 10, 20]
console.log(arr.sort((x,y)=>(y-x))); // [20, 10, 2, 1]
ps:对于数字进行排序中的方法二,由于是对数字进行加减,所以可以直接得到>0/<0的数值作为返回值,而对字符串无法相减,相减得到的为“NAN”,所以需直接比较大小,不能采用直接求差返回值的方法。
本文基于廖雪峰的官方网站js教程总结:参考地址。
© 版权声明
文章版权归作者所有,未经允许请勿转载。如内容涉嫌侵权,请在本页底部进入<联系我们>进行举报投诉!
THE END
















暂无评论内容