美文网首页
重点--数组--增删改查

重点--数组--增删改查

作者: 潘肚饿兵哥哥 | 来源:发表于2019-06-25 09:45 被阅读0次

    \color{rgba(254, 67, 101, .8)}{数组新增元素}

    可以通过修改length长度来实现数组扩容的目的
    length属性是可读写的

    修改数组长度
    例如,arr = ['red', 'green', 'blue'];
    arr.length = 5;
    此时就把数组长度变成了5,但是数组中只有3个元素
    此时等价于声明了变量未给值,数据类型是undefined

    image.png

    \color{rgba(254, 67, 101, .8)}{可以通过修改数组索引的方式追加数组的元素}

            var arr = ['red', 'green', 'blue'];
            arr[3] = 'yellow';
            console.log(arr);
    
    image.png

    \color{rgba(254, 67, 101, .8)}{如果原本的索引号是有值的,那直接给值就是替换}

            var arr = ['red', 'green', 'blue'];
            arr[0] = 'yellow';
            console.log(arr);
    
    image.png

    上面两个直接用索引给值的案例,如果原本这个索引是没有占用的,就是追加,如果是已经占用的就是替换

    \color{rgba(254, 67, 101, .8)}{给数组追加元素必须带索引,如果不带索引,那么整个数组就没有了}
    \color{rgba(254, 67, 101, .8)}{如下例,整个数组被追加的字符串替代了}

            var arr = ['red', 'green', 'blue'];
            arr = 'yellow';
            console.log(arr);
    

    \color{rgba(254, 67, 101, .8)}{新建一个数组。里面存放10个整数1-10;}

            var arr = [];
            for (i = 0; i < 10; i++) {
                arr[i] = i + 1;
            }
            console.log(arr);
    
    image.png

    \color{rgba(254, 67, 101, .8)}{案例:筛选数组}

    要求:将数组[2,0,6,1,77,0,52,0,25,7];中大于等于10的元素选出来,放入新的数组

    \color{rgba(254, 67, 101, .8)}{方法1}

    这个案例的重点是拿到大于10的数的同时,其他的小于10的元素被删掉后,会以空元素empty的形式继续存在,这些空元素会同时一起被保存到新数组,如下图

    要解决这个问题的办法是:声明一个变量j=0,让它作为新数组的索引,并且让它自增,这样,第一次拿到的大于10的值索引就是0,第二次拿到的就是j自增厚的结果1,以此类推

    image.png
            var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
            var max = [];
            var j = 0;
            for (i = 0; i < arr.length; i++) {
                if (arr[i] > 10) {
                    max[j] = arr[i];
                    j++;
                }
            }
            console.log(max);
    
    
            //方法2
            var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
            var max = [];
            //max.length = 0,可以用它作为max数组的索引,
            //每存入一个元素,长度自然增长1位
            for (i = 0; i < arr.length; i++) {
                if (arr[i] > 10) {
                    max[max.length] = arr[i];
                }
            }
            console.log(max);
    
    image.png

    \color{rgba(254, 67, 101, .8)}{3个案例:}
    \color{rgba(254, 67, 101, .8)}{案例1:}

    要求:将数组[2, 0, 6, 1, 77, 0, 52, 0, 25, 7];中的0去掉后,形成一个不包含0的新数组

            // var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];中的0去掉,形成一个不含0的新数组
            var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
            num = [];
            for (i = 0; i < arr.length; i++) {
                if (arr[i] != 0) {
                    num[num.length] = arr[i];
                }
            }
            console.log(num);
    
    image.png

    \color{rgba(254, 67, 101, .8)}{案例2:}

    要求:将数组['red','green','blue','pink','purple']的内容反过来存放

    旧数组的最后一个元素时新元素的第一个元素,以此类推

            //重点:arr存入num的每一个元素是它的索引
            var arr = ['red', 'green', 'blue', 'pink', 'purple'];
            num = [];
            for (i = arr.length - 1; i >= 0; i--) {
                num[num.length] = arr[i]
            }
            console.log(num);
    
    image.png

    \color{rgba(254, 67, 101, .8)}{案例3:}

    数组排序(冒泡排序)
    冒泡排序:把一系列的数据按照约定的顺序进行排列显示(从小到大或从大到小)

    原理是一次比较两个变量值,如果他们的顺序错误就交换过来(就像之前的交换;两个变量的值,用的方法是创建一个零时变量来作为媒介交换),一直重复进行到没有可交换的元素为止

    冒泡排序不是一次循环就能出结果的,每次只能比出一个结果来,下一轮继续比较下一个,理论上有几个元素就要比较几轮

    \color{rgba(254, 67, 101, .8)}{将数组[5,4,3,2,1]中的元素按从小到大排序}

    分析
    1. 一共需要交换的次数,用外层for循环做
    (1) 5个数一共需要循环4次
    (2)长度就是数组的长度减去1 ==> arr.length- 1
    2.每一次交换次数用内层for循环做
    (1)第一次交换4次
    (2)第二次交换3次
    (3)第三次交换2次
    (4)第四次交换1次
    长度就是数组长度减去次数
    但是我们次数是从0开始的,所以最终 arr.length - i - 1
    3.最后一步,交换两个变量位置,完成排序
    (1)前一个数和后一个数相比较,如果需要交换就交换顺序
    (2)交换位置的方法是之前学的交换两个变量值的方法:声明一个零时变量,用这个零时变量来进行交换

    \color{rgba(254, 67, 101, .8)}{内层for循环分析}

    交换次数也是交换完成后这个数最终的索引

    image.png
    索引为 交换次数 规律
    0 4 arr.length - i - 1
    1 3 arr.length - i - 1
    2 2 arr.length - i - 1
    3 2 arr.length - i - 1

    \color{rgba(254, 67, 101, .8)}{代码实现:}
    \color{rgba(254, 67, 101, .8)}{1.这段代码无论数组是什么顺序都能实现}
    \color{rgba(254, 67, 101, .8)}{2.排列的顺序体现在if的条件表达式,修改这个表达式的可以改为其他的顺序}
    \color{rgba(254, 67, 101, .8)}{例如将>改成<,就会变成[5, 4, 3, 2, 1];正好取反}

            var arr = [5, 4, 3, 2, 1];
            for (i = 0; i < arr.length - 1; i++) {
                for (j = 0; j < arr.length - i - 1; j++) {
                    if (arr[j] > arr[j + 1]) {
                        var temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
    
                    }
                }
            }
            console.log(arr);
    
    image.png

    向数组末尾增加元素:

    /*
         * push()
         *  - 该方法可以向数组的末尾添加一个或多个元素,并返回数组的新的长度
         *  - 可以将要添加的元素作为方法的参数传递,
         *      这样这些元素将会自动添加到数组的末尾
         *  - 该方法会将数组新的长度作为返回值返回
         */
        
        var arr = ["孙悟空","猪八戒","沙和尚"];
        
        var result = arr.push("唐僧","蜘蛛精","白骨精","玉兔精");
        console.log("result = "+result);//返回添加元素后的新数组长度
        console.log(arr);
    
    image.png

    删除:

    /*
    * pop()
    *   - 该方法可以删除数组的最后一个元素,并将被删除的元素作为返回值返回
    */
    
    var arr = ["孙悟空","猪八戒","沙和尚","唐僧","蜘蛛精","白骨精","玉兔精"];
        
        result = arr.pop();
        
        console.log("result="+result);
        console.log(arr);
    

    已被删除的值作为返回值返回:


    image.png

    向数组前面增加元素:

    /*
         * unshift()
         *  - 向数组开头添加一个或多个元素,并返回新的数组长度
         *  - 向前边插入元素以后,其他的元素索引会依次调整
             *      -  返回值是新数组的长度,跟push一样
         */
        
        var arr = ["孙悟空","猪八戒","沙和尚","唐僧","蜘蛛精","白骨精","玉兔精"];
        
        console.log(arr);
        
        result =arr.unshift("牛魔王","二郎神");
        
        console.log(arr);
        
         console.log("result="+result);
    
    image.png

    删除数组前面的元素:

    /*
         *pop()删除最后一个元素
         * 
         * unshift()向数组开头添加一个或多个元素,并返回新的数组长度
         * shift()
         *  - 可以删除数组的第一个元素,并将被删除的元素作为返回值返回
         */
        
        var arr = ["孙悟空","猪八戒","沙和尚","唐僧","蜘蛛精","白骨精","玉兔精"];
        
        console.log(arr);
        
        result = arr.shift("孙悟空");
        
        console.log(arr);
        console.log("result="+result);
    

    被删除的第一个元素作为返回值返回:


    image.png

    相关文章

      网友评论

          本文标题:重点--数组--增删改查

          本文链接:https://www.haomeiwen.com/subject/uhpaqctx.html