js sort排序

问题描述:如何对数组arr = [ 10, 20, 1, 2 ]使用sort方法进行排序?

注意不要与JAVA中的Arrays.sort()方法混淆,js中的sort方法+compareTo(即比较元素之间大小关系)≈JAVA的sort()。

在js中直接使用arr.sort()并得不出正确结果,所以要先对sort()函数进行元素排序的规则进行了解。

1.sort排序规则

(1)对于字符串排序,以ASCII码顺序为依据进行排序,所以比较顺序大写单词排在小写之前。

eg:

js sort排序

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

(3)sort方法直接对原数组进行修改。

eg:

js sort排序

知道以上规则,且基于数组的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
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容