• 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>
  • 相关阅读:
    收集一些.NET开发资源站点和部分优秀.NET开源项目
    对DataTable数据进行查询过滤
    转:CommandArgument 传多个值到另外页面的方法
    转:SqlServer中的datetime类型的空值和c#中的DateTime的空值的研究
    (转)SQL语句Select Case和If else
    .net 使用NPOI或MyXls把DataTable导出到Excel
    pycharm+PyQt5+python最新开发环境配置,踩坑过程详解
    sql server2008系统表详细说明sys.开头的表
    SqlServer中Sql查看存储过程
    SQL SERVER导入EXCEL文件:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序
  • 原文地址:https://www.cnblogs.com/zhangfengyang/p/4893888.html
Copyright © 2020-2023  润新知