数组方法 sort() 排序错乱问题
一、问题
在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() 排序错乱问题相关推荐
- Array数组对象sort排序方法
数组sort排序方法 Array数组对象中的sort方法是根据数组中数组元素的字符编码进行排序的,所以对数字的排序,会跟想要的升序结果不一样 通过设置sort()方法的参数可以按照自定义的排序方式对数 ...
- 数组的sort()排序
目录 1.sort函数的基本用法 2.sort函数接受一个函数作为参数 3.数组中包含对象进行排序 1.sort函数的基本用法 数组的sort方法,默认按照字母顺序升序排序,更准确地说是按照ASCII ...
- Python内置函数sorted()和列表方法sort()排序规则不得不说的事
Python内置函数sorted()和列表方法sort()可以使用key参数指定排序规则,并且都是稳定排序,也就是说,对于指定规则不能涵盖的元素,本来谁在前面,排好以后谁还是在前面. 直接用代码说话: ...
- js数组的sort排序(获取中位数)
默认的sort排序,不指定参数,将会发现排序结果不是我们想要的真正排序,如下: A=[1,2,33,22,14,5,132] A.sort() //[1, 132, 14, 2, 22, 33, 5] ...
- js数组的sort排序的原理和应用
1.js sort()方法的应用: 首先:如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序.要实现这一点,首先应把数组的元素都转换成字符串( ...
- js 数组对象sort()排序(升序降序)
升序 let testArr = [{ name: 'tom', age: '12' },{ name: 'marry', age: '17' },{ name: 'xxx', age: '14' } ...
- php 多维数组 array sort 排序 :array_multisort
1.参考链接: php简单实现多维数组排序的方法 参考二: 这个链接很好,可以直接看这个:PHP array_multisort-对多个数组或多维数组进行排序 2.案例一: 1 //13: 最佳: 2 ...
- js数组的sort排序详解
http://www.cnblogs.com/longze/archive/2012/11/27/2791230.html <body> <div> sort()对数组排序,不 ...
- 对vector<int> 的数组使用sort排序出错
刷题时,对于多个vector数组按照第二个元素的大小进行排序,其实很简单. 力扣1710. Maximum Units on a Truck 但是一开始代码写的是 class Solution {pu ...
最新文章
- android gridview滑动卡,Android RecyclerView的卡顿问题
- 反思专注力:重视专注;转变认知;避开即时娱乐;控制专注;氛围想不专注都难
- SUN:开源在Web2.0时代
- 李彦宏:我从未说过百度“All in AI”,这得怪陆奇
- 数据存储之偏好设置NSUserDefaults
- python unittest教程_python unittest 基本介绍
- 基于KELI5 新建一个STM32 project流程
- Zynq-PS-SDK(14) 之 OV5640-HDMI 视频通路硬件搭建
- eclipse 图形界面设计技巧——JLabel
- 计算机视觉论文-2021-04-01
- ethtool修改网卡mac地址流程
- 阿里云飞天系统质效管理体系入选信通院“软件质效领航者”优秀案例
- 7-33 统计素数并求和(20 分)
- ListT的各种排序方法
- 听李善友讲移动互联网颠覆式创新
- HTTP 请求头中的 Remote_Addr,X-Forwarded-For,X-Real-IP | Spring Cloud 13
- Golang源码探究 —— 网络轮询器netpoller
- HTML5的离线应用
- LWN:在Linux上用Waydroid运行安卓应用!
- Three.js加载.stl格式模型
热门文章
- CKEDitor支持WORD格式的缩进问题
- Qt描述路径Qfile时绝对路径不明错误
- prometheus监控之alertmanager安装配置(2)接入电话报警、微信告警、短信、邮件等报警
- 打印5列五颗星_王者荣耀段位排列每个段位多少星?段位排列标志多久刷新一次?[多图]...
- winform皮肤控件【皮肤文件使用及错误解决办法】
- trunc函数的使用
- ps的基础对齐排版和形状变换的使用(小白基础教学)
- 间谍程序Exodus移植到iOS平台上 恐窃取用户信息
- Unified Emoji表情for Android
- 绘制2000年、2017年第一季度国民生产总值产业构成分布、行业构成分布直方图