DAY07.笔记

162 阅读3分钟

一、arguments

  1. arguments 是一个对应于传递给函数的参数的类数组对象。
  2. 一般情况下除使用形参来接收实参的值之外,还可以用arguments来接收实参,他是一个伪数组

二、数组

- 数组基础

  1. 数组是引用数据类型
  2. 他用来存储一组相同数据类型的数据,虽然也可以存储不同数据类型的数据但是那样不规范

var i =[1,2,3,4]

  1. 数组的下标是访问数组的值的方法:i[index]
  2. i.length表示的是数组的长度。每一次赋值之后数组的长度也会发生改变
  3. 数组是一个对象 var arr = new Array(1,2,3); // new是实例化对象,Array是构造函数,用来产生对象 Array只有一个值时表示数组的长度
        var arr = [1,2,3];
        console.log(arr[10]) // 此时因为arr[10]即角标为10的位置没有存放数据 所以结果为undefined
        
        arr[10] = 20// 变相增加了数组的长度
        console.log(arr.length); // 11

        // 此时数组内的值为
        console.log(arr);// [1, 2, 3, 空属性(empty) × 7, 20]
  1. 数组的赋值
// 作用:产生一个规定位数随机数,并且赋予数组
// 参数:n 产生几个数
// 返回值:一个数组
function suijiArr(n){
    var arr = []
     // 生成10个随机数存入数组
     for( i = 0; i < n; i++ ){
         arr[i] = suiji(0,100);
     }
     return  arr;
}
// 作用:封装一个生成 min - max 之间的随机数的函数
// 参数:min:number 随机数区间的最小值 
//      max: number 随机数区间的最大值
// 返回值: number 一个min - max之间的随机数
function suiji(min,max){
    var m = Math.floor(Math.random()*(max - min) + min);
    return m;
}

  1. 数组的遍历
        // 数组的遍历
        var arr = [8,5,8,4,6,1, ,4,8]
        // 方法一 普通的for循环
        for(i = 0; i < arr.length; i++ ){
            // 挨个遍历出每一个角标的值
            console.log(arr[i])
        }

        // 方法二 for in 
        // 用于遍历对象的角标,值是字符串数据类型.但是会出现bug 会自动过滤掉空值
        for(var i in arr){
            console.log(arr[i])
        }

        // 方法三 for of 遍历对象的值
        for(var v of arr){
            console.log(v)
        }

- 冒泡排序

     // 冒泡排序 数组中的值从小到大排序

        var arr = [9,6,5,4,1];
        // 思路
        // 第一轮循环  拿到最大的值挨个作比较放在最后面
        // 9 6         6 9 5 4 1
        // 9 5         6 5 9 4 1
        // 9 4         6 5 4 9 1
        // 9 1         6 5 4 1 9

        // 第二轮循环  拿到第二大的值放在倒数第二个
        // 6 5         5 6 4 1 9
        // 6 4         5 4 6 1 9
        // 6 1         5 4 1 6 9
        // 6 9         5 4 1 6 9  多循环了一次

        // 第三轮循环  拿到第三大的值
        // 5 4         4 5 1 6 9
        // 5 1         4 1 5 6 9
        // 5 6                    多循环了两次
        // 5 9 

        // 第四轮循环  拿到第四大的值
        // 4 1        1 4 5 6 9
        // 4 5                    多循环了四次
        // 4 6
        // 4 9

        // 代码实现
        // 外层循环一共循环4次即长度减一次
        for(i = 0 ; i < arr.length; i++){
            // 内层循环 相邻两个数挨个做比较 大的数与小的交换位置,让更大的数字相后靠
            for(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)

- 选择排序

        var arr = [8,2,5,4,6,1]
        // 选择排序是假设第一个为最小值,依次对比记下角标,直到对比到最后一个值,才开始对第一个值和最小的值进行交换
        // 选择排序减少了循环对比的次数和交换的次数  
        // 外层循环 控制着整体的循环次数,一共循环长度减一次
        for(var i = 0; i< arr.length - 1; i++){
            // 假设第i个角标的值是最小值
            var min = i;
            // 内存循环 控制着每一个数一次对比循环 且每一次循环的初始值都是上一次循环加一开始
            for(var j = i + 1 ;j < arr.length; j++){
                // 找到比当前值还要小的值时,即min目前对应的数比这个比较数还大,将其角标赋给min
                if(arr[min] > arr[j]){
                    min = j;
                }

            }

            // 内部循环一次结束之后,开始对当前的第一个角标的值和min此刻所对应的最大值进行交换
            // 注意,若此刻的min就是最小值那就不用做交换
            if(min != i){
                var t = arr[i];
                arr[i] = arr[min]
                arr[min] = t
            }
        }
        // 打印这个经过选择排序后的数组
        console.log(arr)

- 数组的基本方法

  1. push() 向数组尾部追加值 可以有多个参数
        var arr = [1,2,3]
        // push()向数组尾部追加值 可以有多个参数
        arr.push(5,6,5,4)
        console.log(arr) //[1, 2, 3, 5, 6, 5, 4]
  1. pop()删除 在数组尾部删除1个值,无参数
        var arr = [1,2,3]
        arr.pop()
        console.log(arr) // [1, 2] 

3.unshift()向数组的头部追加值

        var arr = [1,2,3]
        arr.unshift(0,0,0);
        console.log(arr);//[0, 0, 0, 1, 2, 3]

4.shift() 向数组的头部删除一个值

        var arr = [1,2,56,4,5]
        arr.shift();
        console.log(arr); //[2, 56, 4, 5]

- push的封装

       // push的封装
        function push(){
            var arr = []
            // 用arguments接收实参列表 他是一个关键字,不用特地去声明,遍历这个存储在arguments里的实参列表
            for(var i = 0; i <= arguments.length;i++ ){
                arr[arr.length] = arguments[i]
            }
            return arr
        }
        console.log(push(1,2,1,3))

- pop的封装

    <script>
        // pop的封装 重新装在另一个数组里面
        function pop(){
            var arr = [1,2,3]
            var arr2 = [] 
            for(i = 0;i < arr.length - 1 ;i++){
                arr2.push(arr[i])              
            }
            return arr2
        }
        console.log(pop())
    </script>