JavaScript_Day_08 排序

函数知识点小结:

函数:

1. 封装性,复用性,调用性;

2. 函数名  小驼峰 (首字母不要大写);

形参:

1. 函数声明时的参数;

2. 用于接受实参的;

3. 本质上是局部变量;

 实参:

1.  函数调用时的参数;

2.  返回值  return;

3.  返回一个结果;

3.  结束整个函数;

              预编译  函数可以先调用后声明

              arguments 用于接受实参列表(伪数组)

              递归函数  自己调用自己

              构造函数  创建对象

              回调函数  ?

数组

创建方式2种:    [ ]    new Array(1,2,3,3);

*  数组的长度 ,数组的下标

*  数组的长度和值可以随时被更改

数组的遍历

               for
               for in    遍历下标   主要是用于遍历对象(不适合数组)
               for of   遍历值

封装

              includes()   判断数组中是否存在某个值

              质数判断的假设法和是否存在的假设法做对比(到底flag为true还是false)

              join()    把数组变成字符串  (三目)    i < arr.length - 1 ? arr[i] + ',' : arr[i]

              push()  向数组尾部追加无数个  遍历arguments ,把数组的长度边长  arr[arr.length] = arguments[i]

              pop()  删除数组中最后一个值  创建一个新的数组  遍历原数组时丢掉最后一个  i < arr.length - 1

排序

冒泡排序: 

思路:相邻的做比较,大的就向后交换   arr[i] > arr[i+1];

        function bubbleSort(arr) {  
            // 控制比较的轮数
            for(var i = 0 ; i < arr.length - 1 ; i++) {
                // 从头开始做比较(大数下沉)
                for(var j = 0 ; j < arr.length - 1 - i ; j++) {
                    if(arr[j] > arr[j + 1]) {
                        var t = arr[j] ;
                        arr[j] = arr[j + 1] ;
                        arr[j + 1] = t ;
                    }
                }
            }
            // console.log(arr);
            return arr
        }


        var arr2 = bubbleSort([8,6,4,3,2,10]);
        console.log(arr2);

选择排序:

思路:找到最小的数,放在前面;

        function selectSort(arr) {  
            // 控制比较的轮数
            for(var i = 0 ; i < arr.length - 1 ; i++) {
                // 假设第一个位置最小,与后面所有的数比较
                var min = i ;
                for(var j = i + 1 ; j < arr.length ; j++) {
                    // 拿第一个位置上的 数与后面所有的数做比较
                    if(arr[min] > arr[j]) {
                        // min 记录最小的角标
                        min = j ;
                    }
                }
                // 判断与假设是否相同
                if(min !== i) {
                    var t = arr[min] ;
                    arr[min] = arr[i] ;
                    arr[i] = t ;
                }
            }
            // console.log(arr);
            return arr
        }

        var arr2 = selectSort([8,6,4,3,2,10]);
        console.log(arr2);

验证码:

* 随机验证码,必须同时包含小写,大写和数字;

    <script>


        function rand(min , max) {  
            return parseInt(Math.random() * (max - min) + min)
        }

        function join(arr , f) {  
            var res = '' ;
            for(var i = 0 ; i < arr.length ; i++) {
                res += i < arr.length - 1 ? arr[i] + f : arr[i]
            }
            return res
        }

        // function randCode(n) {  
        //     // 默认4位
        //     n = n || 4 ;
        //     var res = '' ;

        //     var arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] ;


        //     for(var i = 0 ; i < 4 ; i++) {
        //         res += arr[rand(0,arr.length)]
        //     }
        //     console.log(res);
        //     return res ;
        // }


        function randCode(n) {  
            // 默认4位
            n = n || 4 ;
            var arr2 = [] ;

            var numArr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
            var bigArr = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] ;
            var smallArr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] ;
            var allArr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] ;

            // 从数字中去一个
            arr2.push(numArr[rand(0,numArr.length)]) ;
            // 从大写中去一个
            arr2.push(bigArr[rand(0,bigArr.length)]) ;
            // 从小写中去一个
            arr2.push(smallArr[rand(0,smallArr.length)]) ;
            for(var i = 0 ; i < n - 3 ; i++) {
                arr2.push(allArr[rand(0,allArr.length)])
            }

            // 以上顺序总是一样的
            console.log(arr2);

            // 打乱顺序,随机交换每个位置上的值
            for(var i = 0 ; i < arr2.length ; i++) {
                var j = rand(0 , arr2.length) ;
                var t = arr2[i] ;
                arr2[i] = arr2[j] ;
                arr2[j] = t ;
            }
            
            
            // document.write(join(arr2 , ''))
            return join(arr2 , '') ;
        }

        var res = randCode();
        document.write(res)

    </script>

数组的方法

数组的方法  push( ) 、  pop( ) 、  unshift( ) 、shift( );

数组的常用方法:

          join()  把数组变成字符

          includes()  判断数组中是否存在某个

          indexOf()  判断数组中是否存在某个值,返回第一次出现的下标,找不到就返回-

          lastIndexOf()  判断数组中是否存在某个值,返回最后一次出现的下

          concat()   拼接数组,返回一个新的数

          slice(i,i)  截取数组中的部分值,返回一个新的数

          splice(i , 删除的个数 , 新增的值...)  新增,删除,替换 --- 直接改变原数组   !!!!!!!

    <script>

        function includes(arr , n) {  
            for(var i in arr) {
                if(arr[i] === n) {
                    return true
                }
            }
            return false
        }

        function indexOf(arr , n) {  
            for(var i in arr) {
                if(arr[i] === n) {
                    return i
                }
            }
            return -1
        }

        function lastIndexOf(arr , n) {  
            // 假设找不到
            // var flag = -1 ;
            // for(var i in arr) {
            //     if(arr[i] === n) {
            //         flag = i
            //     }
            // }
            // return flag 

            for(var i = arr.length - 1 ; i >= 0 ; i--) {
                if(arr[i] === n) {
                    return i
                }
            }
            return -1
        }


        var arr = [1,2,3,4,2,5] ;
        var str = arr.join('&') ;
        console.log(str);

        console.log(arr.includes(20));

        console.log(arr.indexOf(2));

        console.log(arr.lastIndexOf(2));

        var arr1 = [1,2,3,4] ;
        var arr2 = [6,7,8] ;
        var arr3 = arr1.concat(arr2);
        console.log(arr3);

        // slice(i , i)  截取数组中的值   (包前不包后)

        var arr4 = [1,2,3,4,5,6,7] ;
        var arr5 = arr4.slice(2,5);
        console.log(arr5);


        // splice(i , 删除的个数, 插入的值) 删除,替换,新增
        //   用法1:在任意位置插入数据
        //       arr.splice(i , 0 , v1 ,v2 , v3 ....)
        //   用法2:删除
        //      arr.splice(i , 删除的个数)
        //   用法3:替换
        //    

        var arr = [1,2,3,4,5] ;
        arr.splice(arr.length,0,'a','b','c') ;
        console.log(arr);

        // splice(i , 删除的个数)
        arr.splice(2 , 2);
        console.log(arr);

        // splice( i , 删除的个数 , 替换的值...)
        arr.splice(3 , 3 , 'A' ,'B' , 'C');
        console.log(arr);
        arr.splice(2,0,'a')

    </script>

判断数组:

基本数据类型:number   string  boolean   null   undefined

基本数据类型可以通过 typeof 来判断;

引用数据类型:unction  数组   对象

       Array.isArray()  判断是不是数组

数组去重:

方法1:得到新的数组;

        var arr = [1,2,3,42,1,3,2,2,1,3,5] ;

        var newArr = [] ;
        // 遍历原数组
        for(var i in arr) {
            // 判断原数组中每一个值是否在新数组中存在
            // if(newArr.indexOf(arr[i]) === -1)
            // if(!newArr.includes(arr[i])) {
            //     newArr.push(arr[i])
            // }

            // 自己把includes方法写了一遍
            var flag = false ;  
            for(var j in newArr) {
                if(newArr[j] === arr[i]) {
                    flag = true ;
                    break ;
                }
            }
            if(!flag) {
                newArr.push(arr[i])
            }

        }

        console.log(newArr);

方法2:直接改变原数组

 //     对比,出现重复的就删掉

        //   拿第一个值出来跟后面所有的值作比较
        var arr = [1,2,3,42,1,3,2,2,1,3,5] ;
        
        // 比较的轮数
        for(var i = 0 ; i < arr.length - 1 ; i++) {
            // 拿第i个数与后面所有的数进行比较
            for(var j = i + 1 ; j < arr.length ; j++) {
                // 只要相同就删除
                if(arr[i] === arr[j]) {
                    // 没删除一个的时候,数组塌陷!!!!!!!!!!
                    arr.splice(j , 1);
                    j--;
                }
            }
        }

        console.log(arr);

数组统计:

        <script>

            // 统计每一个值出现的次数
            var arr = [1,2,3,42,1,3,2,2,1,3,5] ;

            // // 比较的轮数
            // for(var i = 0 ; i < arr.length ; i++) {
            //     var count = 0 ;
            //     // 拿每一个值与所有的值进行比较
            //     for(var j = 0 ; j < arr.length ; j++) {
            //         if(arr[i] === arr[j]) {
            //             count++ ;
            //         }
            //     }
            //     console.log(arr[i] + '出现了' + count + '次');
            // }


            // 方法1:先去重再统计
            // var arr2 = [] ;
            // for(var i = 0 ; i < arr.length ; i++) {
            //     if(!arr2.includes(arr[i])) {
            //         arr2.push(arr[i])
            //     }
            // } 
            // console.log(arr2);


            // // 拿新数组中的每一个值与原数组进行比较
            // for(var i = 0 ; i < arr2.length ; i++) {
            //     var count = 0 ; 
            //     for(var j = 0 ; j < arr.length ; j++) {
            //         if(arr2[i] === arr[j]) {
            //             count++
            //         }
            //     }
            //     console.log(arr2[i] + '出现了' + count + '次');
            // }


            // var arr = [1,2,1,3,2,3]

            // 方法2:一边删除一边统计
            for(var i = 0 ; i < arr.length ; i++) {
                // 拿第一个值与后面的值进行比较
                var count = 1 ;
                for(var j = i + 1 ; j < arr.length ; j++) {
                    if(arr[i] === arr[j]) {
                        count++ ;
                        arr.splice(j , 1) ;
                        j-- ;
                    }
                }
                console.log(arr[i] + '出现了' + count + '次');
            }
            console.log(arr);



            // 方法3:先排序,再统计
            var arr = [1,1,1,1,2,2,2,3,4,4];

            for(var i = 0 ; i < arr.length ;  ) {
                var count = 1 ;
                for(var j = i + 1 ; j < arr.length ; j++) {
                    if(arr[i] === arr[j]) {
                        count++ ;
                    }
                    else {
                        // 只要不相等说明后面没有相同 的了
                        break ;
                    }
                }
                console.log(arr[i] + '出现了' + count + '次');
                i += count
            }

        </script>

封装concat

   <script>

        // var arr1 = [1,2,3] ;
        // var arr2 = [6,7,8] ;

        // // [1,2,3,6,7,8]


        // var arr3 = [] ;

        // // 遍历第一个数组
        // for(var i in arr1) {
        //     arr3.push(arr1[i])
        // }

        // // 遍历第二个数组
        // for(var i in  arr2) {
        //     arr3.push(arr2[i])
        // }

        // console.log(arr3);



        // function concat(arr1 , arr2) { 
        //     var arr3 = [] ; 
        //     // 遍历第一个数组
        //     for(var i in arr1) {
        //         arr3.push(arr1[i])
        //     }

        //     // 遍历第二个数组
        //     for(var i in  arr2) {
        //         arr3.push(arr2[i])
        //     }

        //     console.log(arr3);
        // }

        function concat() { 
            var arr3 = [] ; 
           
            for(var i in arguments) {
                var arr = arguments[i] ;
                for(var j in arr) {
                    arr3.push(arr[j])
                }
            }

            console.log(arr3);
        }


        concat([1,2,3] , ['a' , 'b' ,'c'] , [4,5,7])


    </script>

回调函数

callback: 回调函数,把一个函数当做另一个函数的参数;

        function xunHuan(n , fn) {  
            for(var i = 0 ; i < n ; i++) {
                fn()
            }
        }

        xunHuan(5 , function(){
            document.write(1 + '<br>')
        })


        xunHuan(6 , function () {  
            console.log(666);
        })


        function ff() {  
            console.log(999);
        }


        xunHuan(10 , ff)

数组的迭代方法 

   <script>

        // forEach(function(v , i , arr){})   遍历数组

        var arr = [1,2,3,5,6,7] ;
        var sum = 0 ; 
        arr.forEach(function (v , i , arr) {  
            sum += v ;
        })
        console.log(sum);



        function forEach(arr , cb) {  
            for(var i = 0 ; i < arr.length ; i++) {
                cb(arr[i] , i)
            }
        }

        forEach([1,2,3] ,function (v , i) {  
            // console.log(666);
            console.log(v);
            console.log(i);
        })

        // 把数组中的每一个值加1

    </script>

         sort()   ASCII升序

         sort(function(a,b){return a - b})  升序

         sort(function(a,b){return b - a})  降

         forEach(function(v,i,arr){})  遍历数

         map(function(v,i,arr){})  改变数组中的值,返回一个新的数组  必须retur

         filter(function(v,i,arr){})  过滤器,找到满足条件的值,返回一个新的数

         every(function(v,i){})  判断数组中是不是每一个值都满足条

         some(function(v,i){})  判断数组中有没有满足条件的 


        var arr = [5,3,22,1,7] ;
        var res = arr.sort(function (a , b) {  
            return b - a
        })
        console.log(res);



        var arr = [5,3,22,1,7] ;
        arr.forEach(function (v, i) { 
            console.log(v); 
            if(i == 2) {
                // break ;   // 报错
                // return   没有任何意义
            }
        })

回调

    <script>

        // sort(函数)
        // var res = arr.sort(function(a,b){return a - b})

        // arr.forEach(function (v,i) {  })

        // 函数也可以是一个参数



        function fn(n) {  
            // console.log(n); // 函数
            n()
        }

        // fn(console.log(777))   // n is not a function


        // var a = console.log(777);
        // console.log(a);


        fn(function(){
            console.log();
        })


        function aa(arr , fn) {  
            for(var i = 0 ; i < arr.length ; i++) {
                fn(arr[i])
            }
        }


        aa([1,2,3] , function (v) {  
            console.log(v);
        })

    </script>

把数组中每个值+1

    <script>

        var arr = [1,2,3] ;
        // for(var i = 0 ; i < arr.length ; i++) {
        //     arr[i] = arr[i] + 1 ;
        // }
        // console.log(arr);

        // for(var i = 0 ; i < arr.length ; i++) {
        //     arr[i] = arr[i] * 2 ;
        // }
        // console.log(arr);

        function aa(arr , cb) {  
            for(var i = 0 ; i < arr.length ; i++) {
                arr[i] = cb(arr[i]) ;
            }
            console.log(arr);
        }


        aa([2,3,4] , function (v) {  
            return v * 3
        })

    </script>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值