js提供了sort方法,方便对数组进行排序,然而不同引擎对js的sort方法解析可能存在差异。本文基于v8引擎进行分析。
在v8引擎中,对sort方法提供了2种排序算法:插入排序及快排序。
sort使用方法:
当没有参数传入的时候,其排序顺序默认为,将待排序数据转换为字符串,并按照 Unicode 序列排序;当然,比较函数可以自定义,自定义排序函数需要返回值,其返回值为 -1,0,1 ,分别表示 a<b, a=b, a>b.
当数组长度小于等于10的时候,采用插入排序,大于10的时候,采用快排。
对于长度大于1000的数组,采用的是快排与插入排序混合的方式进行排序的,因为,当数据量很小的时候,插入排序效率优于快排。
快排的平均时间复杂度是nlogn,在排序算法中属于效率最高的。快排是一种不稳定的排序算法,但是一般情况下稳定或者不稳定对我们没有特别大的影响,但是对稳定性要求高的排序,就不能使用快排了。
原文: https://zhuanlan.zhihu.com/p/33626637
先解释一下data是数组
sort是数组类型自带的一个排序函数,函数的参数是一个函数(也就是方法)
然后先看createComparisonFunction函数
这个函数返回了一个方法
其方法参数在返回方法内用到,符合了执行作用域的条件,形成闭包,保留了propertyName函数
然后看你的排序data.sort(createComparisonFunction("name"))
你在排序的时候传入参数createComparisonFunction("name")
在执行sort之前会先执行createComparisonFunction("name")
他会返回一个方法,其执行作用域保留
然后开始走排序
data.sort方法会内部循环值排序,他每次比较的2个值会传入你传入的函数参数内,通过你传入的函数参数来判断排序
最后简单解释下createComparisonFunction
object1: 比较的第一个值
object2: 比较的第二个值
propertyName: 就是执行createComparisonFunction的参数
data["name"]其实就是data.name的另一种写法
JS数组多条件排序基于Array.sort()方法,首先要了解sort()方法的用法。
sort()方法可以传入一个函数作为参数,然后依据该函数的逻辑,进行数组的排序。
eg:
sort()方法接收函数作为参数时,排序主要根据传入函数的返回值是否大于0进行排序。
1)当 a-b <0时,则a元素排在b元素的前面;(a、b元素位置不变)
2)当a-b= 0时,a,b元素的位置不变;
3)当a-b >0时,则b元素排在a元素的前面。(a、b元素位置交换)
当数组元素为对象时,若要根据对象的多个属性进行排序,就涉及到多条件排序。