sort()的函数参数 —— function(a,b){return a -b} 相关问题_20220114

sort()的函数参数——function(a,b){return a -b} 相关问题

sort()的定义和用法

sort() 方法用于对数组的元素进行排序。

排序顺序可以是字母或数字,并按升序或降序。

默认排序顺序为按字母升序。

注意:当数字是按字母顺序排列时"40"将排在"5"前面。

使用数字排序,你必须通过一个函数作为参数来调用。

函数指定数字是按照升序还是降序排列。

这些说起来可能很难理解,你可以通过本页底部实例进一步了解它。

注意: 这种方法会改变原始数组!。(参考:https://www.runoob.com/jsref/jsref-sort.html)

关于 sort() 这个函数,平时只是用来做一些简单的排序,也只能进行升序排序,以前认为它功能单一,其实不然,写好该函数的参数,sort() 的功能强大出乎想象

1、sort 的原理

在这里插入图片描述

img

此处正序排序原理:

return a-b 这段代码:a指的是array[j] b 指的是array[j+1] 即 a 指的是前一个数,b指的是后一个数;
a-b>0时,也就是 第一个数比第二个数大 则 在if语句中 fncompare()函数的结果 为>0
所以if语句可以执行,两个数交换位置 a 数 换到 b 的位置 意思是 :大的数向后移动
所以 return a-b 的结果就是正序(因为将大的数向后排)
同理 可以知道 return b-a 就是倒序。

引用自:https://blog.csdn.net/qq_43058026/article/details/104531495

图片2中的代码我不知道是不是JavaScript的源码,不过表达的意思很清楚了,sort的原理大概就是冒泡排序吧

2、应用实例

eventOrderArr.sort((a, b) => {
			if (moment(a.startDate).isAfter(b.startDate)) return 1;
			if (moment(a.startDate).isBefore(b.startDate)) return -1;
			return 0;
		});
此处使用的是 时间插件 moment.js 里面的时间比较函数,比较了 a元素和b元素的 startDate 属性 如果 a.startDate 要晚于(isAfter) b 就返回 1,

此处使用的是 时间插件 moment.js 里面的时间比较函数,比较了 a元素和b元素的 startDate属性 如果 a.startDate 要晚于(isAfter) b 就返回 1,如果 a.startDate 要早于(isBefore) b 就返回 -1,相同则返回 0,

这样写就能够 对 eventOrderArr 这个复杂对象数组,根据 startDate属性 进行按 时间先后的 升序排序

掌握了 sort() 的函数参数的写法,对于一些比较 复杂的数组也能轻松进行排序了!

posted on 2022-01-14 14:34  OwlInTheOaktree  阅读(489)  评论(0编辑  收藏  举报