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()方法里面的参数——也就是排序函数的话,可能就比较难理解了. 然后我就总结出 ...
随机推荐
- android 类似微信的摇一摇实现
一.在 AndroidManifest.xml 中添加操作权限 <uses-permission android:name="android.permission.VIBRATE&qu ...
- Spark on Yarn 集群运行要点
实验版本:spark-1.6.0-bin-hadoop2.6 本次实验主要是想在已有的Hadoop集群上使用Spark,无需过多配置 1.下载&解压到一台使用spark的机器上即可 2.修改配 ...
- 修改 hostname
1.修改hostname hostname是一个kernel变量,可以通过hostname命令来查看本机的hostname.也可以直接cat /proc/sys/kernel/hostname查看. ...
- Linux下默认的目录介绍
目录/文件 用途 来源 / /处于Linux文件系统树形结构的最顶端,它是Linux文件系统的入口,所有的目录.文件.设备都在/之下. - /bin 该目录存放着系统最常用的最重要的命令,相当于DOS ...
- IE6 ajax解析parseerror
IE6下,用a[href="javascript:void(0);"]或者a[href="javascript:;"]发起ajax|jsonp请求会出现请求成功 ...
- HDU - 1358 - Period (KMP)
Period Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- JQuery实现ajax跨域
AJAX 的出现使得网页可以通过在后台与服务器进行少量数据交换,实现网页的局部刷新.但是出于安全的考虑,ajax不允许跨域通信.如果尝试从不同的域请求数据,就会出现错误.如果能控制数据驻留的远程服务器 ...
- 75. Find Peak Element 【medium】
75. Find Peak Element [medium] There is an integer array which has the following features: The numbe ...
- Unix环境高级编程(一)
Unix基础知识1.引言2.Unix体系结构3.登陆4.文件和目录5.输入和输出6.程序和进程7.出错和处理8.用户标示9.信号10.时间值11.系统调用和库函数12.小结
- iOS视频压缩存储至本地并上传至服务器
最近做了一个项目,我把其中的核心功能拿出来和大家分享一下,重点还是自己梳理一下. 这里关于视频转码存储我整理了两个方法,这两个方法都是针对相册内视频进行处理的. 1.该方法没有对视频进行压缩,只是将视 ...