新手必知数组排序实操步骤 对数组进行排序的方法( 二 )


v8 中实现 sort() 方法时,采用了 ”插入排序“ 和 ”快速排序“ 两种排序方式 。对于短数组(长度 <= 22)来说,插入排序效率更高 。如果没有传入 comparefn,则生成一个 comparefn 比较函数 。在自动生成的比较函数中,会将传入的数组元素通过 TO_STRING 方法转换为字符串,再行比较 。对比比较函数中的 b 为游标值,这一点和最新版的 chrome 浏览器表现不同 。我们在 sort 方法中传入的函数用在了这里:
var order = comparefn(tmp, element);根据我们传入函数的返回值,数组进行排序操作:
if (order > 0) {a[j + 1] = tmp;} else {break;}如果返回值(a-b)大于0,即 a > b, 则将当前拿来比较的值 a 复制给它的下一位,并继续使用游标值 b 向前进行比较 。如果返回值小于等于 0,则结束比较,并将游标值 b 填在最后一次比较值 a 的后面 。总结不管是旧版本还是最新版本的 v8,它们的 sort() 方法的返回结果都没有发生变化,只是内部的实现机理有了改变(肯定是向着更优的方向改变) 。
为了是 sort() 的返回结果符合预期,我们给它传入了一个函数作为比较规则 。
在比较函数中,因 v8 版本不同,实现机制有差异,导致它的参数意义也不大相同,所以我们暂时无需关心它里面参数的具体含义 。
比较函数如果写完全的话,应该是:
arr.sort((a,b) => {const res = a - b;return res > 0 ? 1 : (res < 0 ? -1 : 0 );});即比较函数的返回值严格来说只有三个:-1、0 和 1。
我们主需要记住 return a – b 是升序排列,return b – a 是降序排列即可 。


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: