当前位置:   article > 正文

数组方法 sort() 排序错乱问题_.sort()排序两位数不对

.sort()排序两位数不对

一、问题

在JavaScript中,数组使用sort()后发现有排序不正确的情况,如下:

  1. let arr = [1, 2, 3, 10, 20, 30]
  2. arr.sort()
  3. console.log(arr) // [1, 10, 2, 20, 3, 30]

二、原因

其实,sort方法会调用每个数组元素的toString方法得到字符串,然后再根据Unicode编码对得到的字符串进行排序。

  1. // toString后
  2. ['1', '2', '3', '10', '20', '30']
  3. // 对应的Unicode编码
  4. ['49', '50', '51', '49', '50', '51']
  5. // 排序
  6. ['49', '49', '50', '50', '51', '51']
  7. // 对应数组元素
  8. [1, 10, 2, 20, 3, 30]

三、解决办法 

显然,这种结果不是我们想要的,这时,sort()方法的参数就起到了作用,我们把这个参数叫做比较函数

  1. let arr = [1, 2, 3, 10, 20, 30]
  2. //比较函数—升序
  3. let compare = (x, y) => {
  4. if (x < y) {
  5. return -1;
  6. } else if (x > y) {
  7. return 1;
  8. } else {
  9. return 0;
  10. }
  11. }
  12. console.log(arr.sort(compare)) // [1, 2, 3, 10, 20, 30]
  13. //比较函数—降序
  14. let compare = (x, y) => {
  15. if (x < y) {
  16. return 1;
  17. } else if (x > y) {
  18. return -1;
  19. } else {
  20. return 0;
  21. }
  22. }
  23. console.log(arr.sort(compare)) // [30, 20, 10, 3, 2, 1]

可以简化为以下常用方法

  1. let arr = [1, 2, 3, 10, 20, 30]
  2. //升序
  3. arr.sort((a, b) => {
  4. return a - b;
  5. })
  6. //降序
  7. arr.sort((a, b) => {
  8. return b - a;
  9. });

 

文章每周持续更新,可以微信搜索「 前端大集锦 」第一时间阅读,回复【视频】【书籍】领取200G视频资料和30本PDF书籍资料

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/807090
推荐阅读
相关标签
  

闽ICP备14008679号