javascript 数组排序之 sort()

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,Chrome=1">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <meta name="renderer" content="webkit">
    <title>Array.sort</title>
</head>
<body>
    <script>
    //很多人不清楚数组排序的具体原理.
    var arr=[1,2,3,4,5,10,20,30,40];
    console.log(arr.sort());    //[1, 10, 2, 20, 3, 30, 4, 40, 5]
    //如果sort就提供我们这样一个排序功能,那不要也罢.
    //实际上,sort默认是把数组的每一项转换成字符串,再进行排序的.
    //所以,只看排序后数组中每一项的第一位的话,你发现它干的不错.
    //但是我们要告诉它,按照我们的规则排序,也就是从小到大排序.
    //sort方法可以接受一个函数作为参数,这个函数就是我们告诉javascript数组排序的规则.
    arr.sort(function(value1,value2){
        if(value1<value2){
            return -1;
        } else if(value1>value2){
            return 1;
        }else{
            return 0;
        } 
    });
    console.log(arr);//[1, 2, 3, 4, 5, 10, 20, 30, 40]
    //很多人迷惑了.其实只要习惯就好,这就是javascript的一个规则.或者说sort判断排序的一个规则.
    //两个参数value1 和 value2 分别代表数组中传入的每一项. value1 代表前一项,value2 代表后一项.
    //如果前一项 < 后一项  返回-1,否则返回1;这是什么意思呢?
    //如果你想太多了,就赶紧打住.
    //我是这样理解的:
    //如果我希望数组从小到大排序.那么我把数组的前一项和后一项作为参数传入比较函数中.
    //函数判断我传入的两个参数.如果第一项比第二项小,那么说明这两项已经是从小到大排序了.不需要再排了,返回-1(相当于标记了不需要排序的数)
    //如果第一项比第二项大,那么这两项需要进行排序,返回1(相当于true);
    //如果两项相等,返回0.(相当于false),不需要排序.
    //就这么简单.如果想知道更深层次的东西,就不是这里能学到的了.
    //现在我想从大到小排列:
    arr.sort(function(value1,value2){
        if(value1<value2){
        //我希望数组从大到小排序,前一项应该大于后一项,所以这个if()的条件,不符合我期望的数组中的规则,需要排序,返回1(正数)
            return 1;
        }else if(value1>value2){
        //符合我期望的数组中的规则,不需要排序,返回-1(负数)
            return -1;
        }else{
        //相等,不需要排序,返回0
            return 0;
        }
    });    
    console.log(arr);//[40, 30, 20, 10, 5, 4, 3, 2, 1]
    //完毕
    //基于幻想的理解并不算是理解,要想真正理解sort,还需要查看语言核心中的具体实现.
    </script>
</body>
</html>

 

posted @ 2015-10-20 09:57  杯酒红尘  阅读(366)  评论(0编辑  收藏  举报