一. 基本用法

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深入理解sort()方法的更多相关文章

  1. Javascript Array对象 sort()方法,记忆方法,方法扩展

    相信 有很多 同仁们,尤其是初学者,在记住 Array对象 sort() 方法的排序,规则上,有点困难: 其实sort()方法已经在实际工作中用到很多遍了,可当我仔细推敲,这个sort()方法,什么时 ...

  2. JavaScript 中数组 sort() 方法的基本使用

    在日常的代码开发中,关于数组排序的操作可不少,JavaScript 中可以调用 sort 方法对数组进行快速排序. 今天,就数组的 sort 方法来学习一下,避免日后踩坑的悲惨遭遇. 概念 sort ...

  3. 【JavaScript排序】 sort()方法(解决null、undefined、0之间的排序(混乱)问题)

    JavaScript排序 - sort()方法 --解决null.undefined.0之间的排序(混乱)问题 一.普通的数组排序 ​ JavaScript中用方法sort()为数组排序.sort() ...

  4. 你真的会用JavaScript中的sort方法吗

      在平时的业务开发中,数组(Array) 是我们经常用到的数据类型,那么对数组的排序也很常见,除去使用循环遍历数组的方法来排列数据,使用JS数组中原生的方法 sort 来排列(没错,比较崇尚JS原生 ...

  5. JavaScript Array对象sort() 方法小结

    sort() 方法用于对数组的元素进行排序. 语法arrayObject.sort(sortfunction) 参数sortfunction 可选.规定排序顺序.必须是函数. 返回值对数组的引用.请注 ...

  6. javascript中的sort()方法

    现在在学习javascript中,发现sort()函数是有点奇怪的东西(可能是本人水平的问题-_-!),于是就在这里记录一下自己找到的东西吧.sort()这个方法的参数很奇怪,必须是函数,但也是可选参 ...

  7. 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;; ...

  8. JavaScript深入理解对象方法——Object.entries()

    Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for...in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环也枚举原型链中的属性) 示例 ...

  9. (JavaScript基础向)sort()方法里的排序函数的理解

    比较常见的解释可以看这里:js的sort()方法,这篇博客写得挺好的,一般的应用的理解已经足够了. 但是如果要活用sort()方法里面的参数——也就是排序函数的话,可能就比较难理解了. 然后我就总结出 ...

随机推荐

  1. Python基础--人们一些最爱的标准库(random time)

    Python继续! random 包括返回随机数的函数. 这里跟C++一样,产生的是伪随机数,并非全然随机数. random中一些重要的函数: random() 返回0<n<=1的随机数n ...

  2. C/C++ linux下光标定位和清屏函数

    printf("\033[47;31mhello world\033[5m"); 47是字背景颜色, 31是字体的颜色, hello world是字符串.  后面的\033[5m是 ...

  3. [1-4] 把时间当做朋友(李笑来)Chapter 4 【开拓我们的心智】 摘录

    1. 获得知识的基本途径  所有的人获取知识的最为基础的手段就是“体验”. 比“体验”再高级一点的获取知识的手段,就是“试错”(Trial and Error). 在“试错”这个手段的基础上,另外一个 ...

  4. C-类型转换(陷阱)

    getchar() 返回值为int类型 1.自动类型转换(运算符两边变量类型不同时) 1).两个变量类型自动转换成一样的类型(会根据参数类型自动转换, 而不是直接位转换), 且运算结果也是转换后的类型 ...

  5. android-pull方式解析xml文件以及XML文件的序列化

    android解析XML ---------------------------基础要像磐石 在android平台上可以使用SAX.DOM和自带的Pull解析器解析xml文件,本文主要介绍使用pull ...

  6. 查看电脑CPU核心数的方法

    查看电脑CPU核心数的方法: 方法一: 同时按下[Ctrl+Shift+Esc]组合快捷键打开任务管理器: 点击[性能]就可以看出是几核CPU了: 方法二: 在计算机图标上面点击右键,选择“管理”: ...

  7. Python MQTT客户端实现

    1.安装paho-mqtt 使用Python Package Index (PyPi) pip install paho-mqtt 使用virtualenv virtualenv paho-mqtt ...

  8. 无线网络RSSI、SSID、BSSID

    获取无线网络,及无线网络的参数之前,我们先了解一下RSSI,SSID和BSSID分别是什么,当然你可以去百度或者维基百科查阅,我这里只是简单的说明一下.RSSI就是无线网络的信号强度,这个是和无线AP ...

  9. mongo views

    db.itemsView.drop(); db.items.aggregate([ { "$match": { "status": "true&quo ...

  10. 43. Spring Boot动态数据源(多数据源自动切换)【从零开始学Spring Boot】

    [视频&交流平台] àSpringBoot视频 http://study.163.com/course/introduction.htm?courseId=1004329008&utm ...