JavaScript深入理解sort()方法
一. 基本用法
let arr1 = [3, 5, 7, 1, 8, 7, 10, 20, 19]
console.log(arr1.sort())
// [1, 10, 19, 20, 3, 5, 7, 7, 8]
如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。
其实,在使用sort()进行排序的时候会调用toString()函数将其值转换成字符串在进行比较,是按ASCII进行比较的。
于是,在比较数字时会转换成字符串再比较,结果就会不准确。
二. 改进用法
let arr1 = [3, 5, 7, 1, 8, 7, 10, 20, 19]
console.log(arr1.sort(function (a, b) {
if (a < b) {
return -1
}
if (a > b) {
return 1
}
return 0
}))
// [1, 3, 5, 7, 7, 8, 10, 19, 20]
console.log(arr1.sort(function (a, b) {
return a - b
}))
// [1, 3, 5, 7, 7, 8, 10, 19, 20]
sort()同时也是一个高阶函数,里面可以放一个比较函数:arr.sort(compareFunction)。
arr.sort(function (a, b) {
return ?
})
- 若compareFunction返回值小于0,a排在b前面,即a与b的位置不变。
- 若compareFunction返回值等于0,a与b的位置不变。
- 若compareFunction返回值大于0,a排在b的后面,即a与b的位置交换。
即若返回值大于0的时候交换a与b的位置,其他情况位置不变。
- 升序:return a - b
- 降序:return b - a
// 降序示例
let arr1 = [3, 5, 7, 1, 8, 7, 10, 20, 19]
console.log(arr1.sort(function (a, b) {
return b - a
}))
// [20, 19, 10, 8, 7, 7, 5, 3, 1]
console.log(arr1.sort((a, b) => {
return b - a
}))
// [20, 19, 10, 8, 7, 7, 5, 3, 1]
三. 比较数组中的对象
let arr2 = [
{
name: 'mazey0',
value: 3
},
{
name: 'mazey1',
value: 5
},
{
name: 'mazey2',
value: 7
},
{
name: 'mazey3',
value: 1
},
{
name: 'mazey4',
value: 10
},
{
name: 'mazey5',
value: 7
}
]
// 升序
let arr3 = arr2.sort((a, b) => {
return a.value - b.value
})
arr3.forEach((value, index, arr) => {
console.log(value.value)
})
// 1 3 5 7 7 10
JavaScript深入理解sort()方法的更多相关文章
- Javascript Array对象 sort()方法,记忆方法,方法扩展
相信 有很多 同仁们,尤其是初学者,在记住 Array对象 sort() 方法的排序,规则上,有点困难: 其实sort()方法已经在实际工作中用到很多遍了,可当我仔细推敲,这个sort()方法,什么时 ...
- JavaScript 中数组 sort() 方法的基本使用
在日常的代码开发中,关于数组排序的操作可不少,JavaScript 中可以调用 sort 方法对数组进行快速排序. 今天,就数组的 sort 方法来学习一下,避免日后踩坑的悲惨遭遇. 概念 sort ...
- 【JavaScript排序】 sort()方法(解决null、undefined、0之间的排序(混乱)问题)
JavaScript排序 - sort()方法 --解决null.undefined.0之间的排序(混乱)问题 一.普通的数组排序 JavaScript中用方法sort()为数组排序.sort() ...
- 你真的会用JavaScript中的sort方法吗
在平时的业务开发中,数组(Array) 是我们经常用到的数据类型,那么对数组的排序也很常见,除去使用循环遍历数组的方法来排列数据,使用JS数组中原生的方法 sort 来排列(没错,比较崇尚JS原生 ...
- JavaScript Array对象sort() 方法小结
sort() 方法用于对数组的元素进行排序. 语法arrayObject.sort(sortfunction) 参数sortfunction 可选.规定排序顺序.必须是函数. 返回值对数组的引用.请注 ...
- javascript中的sort()方法
现在在学习javascript中,发现sort()函数是有点奇怪的东西(可能是本人水平的问题-_-!),于是就在这里记录一下自己找到的东西吧.sort()这个方法的参数很奇怪,必须是函数,但也是可选参 ...
- javascript 中根据sort 方法随机数组 (Math.random)
var arr = [1,2,3,4,5,6,7,8,9,10]; function Arandom(a,b){ return (Math.random() > 0.5) ? 1 : -1;; ...
- JavaScript深入理解对象方法——Object.entries()
Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for...in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环也枚举原型链中的属性) 示例 ...
- (JavaScript基础向)sort()方法里的排序函数的理解
比较常见的解释可以看这里:js的sort()方法,这篇博客写得挺好的,一般的应用的理解已经足够了. 但是如果要活用sort()方法里面的参数——也就是排序函数的话,可能就比较难理解了. 然后我就总结出 ...
随机推荐
- 【C语言天天练(二三)】errno变量
引言: 在C编程中,errno是个必不可少的变量.特别是在网络编程中. 假设你没实用过errno,那仅仅能说明你的程序不够健壮. 为什么会使用errno呢?这是系统库设计中的一个无奈之举.他很多其它的 ...
- 深入理解Tomcat虚拟文件夹
我们知道,Web站点中的内容(包含网页,图片,音频文件等)一般都存放在App的文件夹下.但随着站点内容的不断丰富,用户须要把不同层次的内容组织成站点的子文件夹. 我们通常的做法是在站点主文件夹 ...
- Nginx通过CORS实现跨域(转)
如果前端有nginx方向代理,跨域配置在前端反向代理nginx上 要做跨域域名限制 什么是CORS CORS是一个W3C标准,全称是跨域资源共享(Cross-origin resource shari ...
- 开放平台(接口)开发-1-天气API接口大全
前几天有个公司让准备一下第二次面试.应聘的是IOS开发实习生,可是之前一直做android,IOS刚接触了一个月,会的不是非常多,所以决定做一个实际的项目展现给面试官,余同学给了个建议:能够做一 ...
- linux学习一个服务(未完)
学习一个服务的过程 1.了解服务的作用:名字 功能,特点 2.安装 3.配置文件位置,端口 4.服务启动关闭的脚本 5.此服务的使用方法 6.修改配置文件,实战举例 7.排错(从下到上,从内到外)
- 从零开始学习SSH框架笔记之四 几个关键配置文件备忘(模板)
不多说,直接上代码.关于注释我尽量写详细点. 1.web.xml <?xml version="1.0" encoding="UTF-8"?> &l ...
- MFC 点击按钮,弹出另一个对话框(模态及非模态对话框)
1. 模态对话框 资源视图->Dialog->右键->添加资源->新建->对话框->右键->添加类. 例如:在A_dialog中点击按钮弹出B_dialog ...
- start-stop-daemon
start-stop-daemon是OpenRC计划的一部分,这个程序最先出现在Debian系的Linux发行版中,这里有个比较古老的手册页面,更详细更直观的办法当然是通过man start-stop ...
- OC 基础语法
:Obect c 与 c 语言的区别 () 后缀名不一样,C语言是.c 结尾 ,OC 是 .h结尾. () 输出信息不同 C语言是用print() 输出,OC 是用NSLog输出. () NSLog会 ...
- C++标准库之condition_variable
conditon_variable(条件变量)用于线程间同步 condition_variable有5个函数,函数名及对应的功能如下: wait阻塞自己,等待唤醒 wait_for阻塞自己,等待唤醒, ...