一、问题

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

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

二、原因

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

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

三、解决办法

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

let arr = [1, 2, 3, 10, 20, 30]//比较函数—升序
let compare = (x, y) => {if (x < y) {return -1;} else if (x > y) {return 1;} else {return 0;}
}
console.log(arr.sort(compare)) // [1, 2, 3, 10, 20, 30]//比较函数—降序
let compare = (x, y) => {if (x < y) {return 1;} else if (x > y) {return -1;} else {return 0;}
}
console.log(arr.sort(compare)) // [30, 20, 10, 3, 2, 1]

可以简化为以下常用方法

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

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

数组方法 sort() 排序错乱问题相关推荐

  1. Array数组对象sort排序方法

    数组sort排序方法 Array数组对象中的sort方法是根据数组中数组元素的字符编码进行排序的,所以对数字的排序,会跟想要的升序结果不一样 通过设置sort()方法的参数可以按照自定义的排序方式对数 ...

  2. 数组的sort()排序

    目录 1.sort函数的基本用法 2.sort函数接受一个函数作为参数 3.数组中包含对象进行排序 1.sort函数的基本用法 数组的sort方法,默认按照字母顺序升序排序,更准确地说是按照ASCII ...

  3. Python内置函数sorted()和列表方法sort()排序规则不得不说的事

    Python内置函数sorted()和列表方法sort()可以使用key参数指定排序规则,并且都是稳定排序,也就是说,对于指定规则不能涵盖的元素,本来谁在前面,排好以后谁还是在前面. 直接用代码说话: ...

  4. js数组的sort排序(获取中位数)

    默认的sort排序,不指定参数,将会发现排序结果不是我们想要的真正排序,如下: A=[1,2,33,22,14,5,132] A.sort() //[1, 132, 14, 2, 22, 33, 5] ...

  5. js数组的sort排序的原理和应用

    1.js sort()方法的应用: 首先:如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序.要实现这一点,首先应把数组的元素都转换成字符串( ...

  6. js 数组对象sort()排序(升序降序)

    升序 let testArr = [{ name: 'tom', age: '12' },{ name: 'marry', age: '17' },{ name: 'xxx', age: '14' } ...

  7. php 多维数组 array sort 排序 :array_multisort

    1.参考链接: php简单实现多维数组排序的方法 参考二: 这个链接很好,可以直接看这个:PHP array_multisort-对多个数组或多维数组进行排序 2.案例一: 1 //13: 最佳: 2 ...

  8. js数组的sort排序详解

    http://www.cnblogs.com/longze/archive/2012/11/27/2791230.html <body> <div> sort()对数组排序,不 ...

  9. 对vector<int> 的数组使用sort排序出错

    刷题时,对于多个vector数组按照第二个元素的大小进行排序,其实很简单. 力扣1710. Maximum Units on a Truck 但是一开始代码写的是 class Solution {pu ...

最新文章

  1. android gridview滑动卡,Android RecyclerView的卡顿问题
  2. 反思专注力:重视专注;转变认知;避开即时娱乐;控制专注;氛围想不专注都难
  3. SUN:开源在Web2.0时代
  4. 李彦宏:我从未说过百度“All in AI”,这得怪陆奇
  5. 数据存储之偏好设置NSUserDefaults
  6. python unittest教程_python unittest 基本介绍
  7. 基于KELI5 新建一个STM32 project流程
  8. Zynq-PS-SDK(14) 之 OV5640-HDMI 视频通路硬件搭建
  9. eclipse 图形界面设计技巧——JLabel
  10. 计算机视觉论文-2021-04-01
  11. ethtool修改网卡mac地址流程
  12. 阿里云飞天系统质效管理体系入选信通院“软件质效领航者”优秀案例
  13. 7-33 统计素数并求和(20 分)
  14. ListT的各种排序方法
  15. 听李善友讲移动互联网颠覆式创新
  16. HTTP 请求头中的 Remote_Addr,X-Forwarded-For,X-Real-IP | Spring Cloud 13
  17. Golang源码探究 —— 网络轮询器netpoller
  18. HTML5的离线应用
  19. LWN:在Linux上用Waydroid运行安卓应用!
  20. Three.js加载.stl格式模型

热门文章

  1. CKEDitor支持WORD格式的缩进问题
  2. Qt描述路径Qfile时绝对路径不明错误
  3. prometheus监控之alertmanager安装配置(2)接入电话报警、微信告警、短信、邮件等报警
  4. 打印5列五颗星_王者荣耀段位排列每个段位多少星?段位排列标志多久刷新一次?[多图]...
  5. winform皮肤控件【皮肤文件使用及错误解决办法】
  6. trunc函数的使用
  7. ps的基础对齐排版和形状变换的使用(小白基础教学)
  8. 间谍程序Exodus移植到iOS平台上 恐窃取用户信息
  9. Unified Emoji表情for Android
  10. 绘制2000年、2017年第一季度国民生产总值产业构成分布、行业构成分布直方图