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

2019-06-25  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读