• JavaScript连载21-合并数组、数组中的sort函数实现原理


    一、数组遍历和其他

    1.合并数组

    • 数组.concat(数组1,数组2,数组3,...)
    • 可以用来合并多个数组
        //合并多个数组concat
        var arr = ["zhangsan","lisi","wangwu"];
        var arr1 = ["zhaoli","liqi"];
        var arr2 = ["xiaoliao"];
        var newArr = arr.concat(arr1);//合并了两个数组
        console.log(newArr)
     

    运行结果 21.1

    2.查找元素索引

    • indexOf(searchElement,position)和lastIndexOf(searchElement,position)
    • searchElement是要找的元素(变量),position就是从数组的哪里开始找,返回的是第一个找到的索引;
    • 注意第二个函数是从后往前找到的第一个元素索引
        //indexOf()和lastIndexOf()
        var n1 = 3;
        var arr3 = [5,3,5,77,4,5,6,8];
        console.log(arr3.indexOf(5, 0));
        console.log(arr3.lastIndexOf(5, 5));
     

    显示结果 21.2

    3.foreach

    • 使用一个特殊的格式
        //forEach遍历
        var arr4 = ["zhangsan","lisi","wangwu"];
        arr4.forEach(function (value,index,array) {
            console.log(value);
            console.log(index);
            console.log(array);
        })

    显示结果 21.3

    二、数组排序

    1.sort函数

    • 排序是按照字符编码来进行排序的,如果想要按照其他标准进行排序,那么需要提供比较函数,该函数比较两个值,然后返回一个用于说明这两个值的相对顺序的数字,比较函数具有两个参数a和b,其返回如下:
    类型结果
    a<b a出现在b之前,返回一个小于0的值
    a=b 返回0
    a>b a出现在b之后,返回一个大于0的值
       //sort函数
        var arr5 = ["Tim","Andy","John","Kobe","James"];
        console.log(arr5.sort());
        var arr6 = [10,4,8,6,7,100];
        console.log(arr6.sort());//可以看出即使是数字也会按照编码规则进行排序,而不是按照数字大小来进行排序
        function sortNumber(a,b) {
            return a-b;//
        }
        console.log(arr6.sort(sortNumber));//把这个比较函数传入就可以改写sort的排序逻辑


    ** 运行结果 ** 21.4

    2.使用冒泡排序来实现sort函数

    • 知识点:用函数作为参数传入
        /**
         * sort的内部实现
         * @param {Array}array
         * @param {Function}fnCompare
         */
        function sort(array,fnCompare){
            //这个排序方法是冒泡排序,并且是先排大的值。
            for(var i=0;i<array.length-1;i++){//可以看出数组的长度函数和Java一样
                //标记是否完成了排序
                var sortFlag = true;
                //控制比较次数
                for(var j=0;j<array.length-1-i;j++){
                    if(fnCompare(array[j],array[j+1])>0){//如果没有>0的话,那就会出现永真的状况
                        sortFlag = false;
                        //交换位置
                        var temp = array[j];
                        array[j] = array[j+1];
                        array[j+1] = temp;
                    }
                }
                //判断
                if (sortFlag){
                    break;
                }
            }
        }
        var arr7 = [10,20,5,1000,50];
        sort(arr7,sortNumber);
        console.log(arr7);
     

    显示结果 21.5

    三、源码:

    • D21_1_TraverseArray.html
    • 地址:https://github.com/ruigege66/JavaScript/blob/master/D21_1_TraverseArray.html
    • 博客园:https://www.cnblogs.com/ruigege0000/
    • 欢迎关注微信公众号:傅里叶变换,个人账号,仅用于技术交流,后台回复“礼包”获取Java大数据学习视频礼包
    • 20.4
  • 相关阅读:
    Redis 学习目录
    Knockout 官网学习文档目录
    C# 知识点回忆..
    爬虫-HtmlAgilityPack
    net core 3.1 知识累积
    共享文件夹(局域网)报错:The username or password is incorrect
    使用 Beyond Compare 工具比较合并 TFS 管理的代码
    创建索引,SQL优化
    LINQ SelectMany代替for循环赋值,把联合查询的值赋值给第1个集合
    判断文件编码
  • 原文地址:https://www.cnblogs.com/ruigege0000/p/13222491.html
Copyright © 2020-2023  润新知