JavaScript中的sort排序问题

sort方法:返回一个元素已经进行排序的array对象。

arrayobj.sort(sortfunction)
  • arrayobj
    必选项。任意的array对象
  • sortfunction
    可选项。是用来确定函数的排序的名称。如果这个参数被省略,那么元素将会按照ASCII字符顺序进行升序排列。

sort函数将array对象进行适当的排序,在执行过程中并不会创建新的array对象。
【说明】sort函数是对原有的数组进行排序,返回的也是排序之后的原有的数组对象。
接下里写一个例子

<script>
    var array[1,4,5,7]
    a.sort();
    alert(a);
script>

输出结果:1,4,5,7
大家可以看到,输出的结果正好是从小到大的顺序排列的。接下来我把数据改变一下。

<script>
    var array[5,41,7,18]
    a.sort();
    alert(a);
script>

输出结果:18,41,5,7
结果显示并没金进行排序。那么为什么会出错?

默认情况下,sort函数是按照ASCII字符排序。

实际上。电脑上显示的并不是我们输进去的数值,这里有一个编码。
如果我们在是电脑上输入a,那么在电脑上显示的是97,然后97再转换成二进制。
常用的ASCII字符对应
- a——97
- A——65
- 0——48
- 1——49
按照上面以此类推,2在ASCII中就是49,b就是98,B就是66。

再回到上面的例子,为什么会输出18,41,5,7呢?
原来在ASCII字符排序中,是对应为相比较。18和5相比,实际上就是1和5相比,因为5只有一位数,所以只比较第一位。因为1<5,所以出现了错误的答案。
那么如何解决问题呢?

上面有提到过,如果省略参数,将默认为ASCII字符排序,简而言之,就是有了参数,就不是默认为ASCII字符排序了。

接下里写一个有参数的实例

<script>
sort a=[5,41,7,18];
function  paixu(m,n)
{
    if(m>n)
        return 1;
    else if(mreturn -1;
    else
        return 0;
}
a.sort(paixu);
alert(a);
script>

显示结果:5,7,18,41

sort接受了排序这个函数为参数,那么它就会依据排序这个函数进行排序,不再依据ASCII字符编码来排序了。

有了参数之后如何排序?
【解释】首先。,将5和41传值给m和n。那么比较5和41,这时候,5是小于41的,返回-1,sort就依据这个返回值,负数就认为前面的数小于后面的数,即5<41。

上面的比较容易理解,接下里写一个比较简单的排序。

<script>
sort a=[5,41,7,18];
function  paixu(m,n)
{
    return m-n;
}
a.sort(paixu);
alert(a);
script>

输出结果:5,7,18,41

排序问题就介绍到这里,希望我的文章可以帮到你。

你可能感兴趣的:(javascript)