JS基础知识day7

基础内容回顾:

函数:

           封装性,复用性,调用性

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

           形参:

               函数声明时的参数

               用于接受实参的

               本质上是局部变量

             

           实参:

               函数调用时的参数

           返回值  return

               返回一个结果

               结束整个函数

           作用域

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

           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);

案例:验证码,设置必须含有数字,大写字母,小写字母,并且顺序随机。

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

//  join的封装
        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)

新知识点总结:

数组的方法  

push()   pop()   unshift()  shift()

        数组的常用方法

         join()  把数组变成字符串

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

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

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

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

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

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

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')

判断数组

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

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

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

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

案例:数组去重

  // 数组去重

        

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

        //   方法1:得到新的数组

        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);

案例:统计数组

// 统计每一个值出现的次数
        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
        }

数组中的迭代方法

        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){})  改变数组中的值,返回一个新的数组  必须return

        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   没有任何意义
            }
        })



        var arr = [1,2,3] ;
        var res = arr.map(function (v) {  
            return v + 3
        })
        console.log(res);


        var arr = [1,4,7,3,2] ;
        var res = arr.filter(function (v) {  
            return v > 2
        })
        console.log(res);


        var arr = [10,40,70,38,26] ;
        var res = arr.every(function (v) {  
            return v > 60
        })
        console.log(res);

        var res = arr.some(function (v) {  
            return v > 60
        })
        console.log(res);

关于回调函数的图片分析

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值