当前位置: 代码迷 >> 综合 >> 对JavaScript的Array的排序方法的理解
  详细解决方案

对JavaScript的Array的排序方法的理解

热度:1   发布时间:2024-01-21 18:16:22.0

JavaScript的数组Array的原型里有个sort方法,任何数组都可以使用它,作用是“排序”。具体是怎么排序呢?我今天来做个简单整理。

 

首先,如果不接受参数,sort方法会怎么排序呢?

答案是,把每个元素转成字符串,按照字符串的排列顺序的从小到大进行排序。可以这么记忆:String的开头是s,所以sort方法会给每个元素调用String方法转成字符串,“升序”的拼音也是s开头,sort默认是升序排列。

比如下面这个例子:

let values = [0, 1, 5, 10, 15];
values.sort();
alert(values); // 0,1,10,15,5

因为5排在1后面,所以5排在10后面,这里根本就没有考虑数值的大小,仅仅考虑了“字符串”的排序。

然后,要怎么控制升序和降序排序呢?

奥秘就在sort的参数里了,sort的参数是一个比较函数。现在给大家看看,我平时用的升序排序和降序排序的比较函数:

// 升序
function up (a,b) {return a-b;
}// 降序
function down (a, b) {return b-a;
}

最后,这两个比较函数怎么理解呢?

我在培训机构上到这一课的时候,看到老师传入的比较函数,是一脸懵逼。课后我鼓起勇气问老师,为啥这样就得到了升序排列呢?老师居然回答,他也是不是很清楚,只可意会不可言传。于是我只能死记硬背了。

所幸,今天我在《高程四》这本书里面看到了对于比较函数的解读——

比较函数接收两个参数,如果第一个参数应该排在第二个参数前面,就返回负值;如果两个参数相等,就返回 0;如果第一个参数应该排在第二个参数后面,就返回正值。

如果还是没有看懂,我可以对照着上面的解释和升序的比较函数,来说一下我的理解。

a是数组里前面的元素,b是后面的元素;

如果a-b的结果是负数,那么它返回的是负值,那么a应该排在b前面;

注意,这个时候a减b为负数啊,说明a更小。所以更小的数应该排在前面,所以这是升序排列。

反过来,b-a就是降序排列。(假如b-a为负数,那么a应该排在前面;这个时候a比b更大,这个时候是更大的数排在前面,所以是降序排列)

 希望这篇文章能够帮组到那些初学JavaScript数组,对数组还不是很理解的同学们。感谢你们的阅读!

  相关解决方案