JavaScript-数组

88 阅读3分钟

数组

  • 变量:存储数据的,只能存储一个值
  • 对象:本质特征喝行为的事物,能储存一条数据
  • 数组:可以存储一组(多条数据)或者一系列相关数据的容器
  • 数组元素:存储在数组中,并赋予索引号(下标)的数据段
    • 数据元素的类型可以不相同
    • 数据下标:标识数组元素的唯一索引号,最小下标为0,最大下标为length-1

好处

可以集中管理,提高性能

声明数组

1.字面量方式var 数组名=[] 2.构造函数的方式 var数组名= new Array()

   //1.字面量方式  var 数组名=[]
        var arr = [1, 2, true, "zhangsan", null];
        //数组的长度
        console.log(arr.length);    //5
        //向数据中添加数据
        arr[5] = false;     //没数据的话就是添加
        console.log(arr.length);    //6
        arr[2] = 123;       //有数据的话,就是修改
        console.log(arr);


        //创建数组
        var arr2 = new Array();
        console.log(arr2);
        var arr1 = new Array(2, 3, 88);
        console.log(arr1);

        //创建数组,有且仅有一个整数作为参数,表示数组的长度
        //其他情况表示数组中的元素
        var arr3 = new Array(6);
        console.log(arr3);

        //通过循环向数组中添加元素
        var arr4 = new Array(6);
        for (i = 0; i < arr4.length; i++) {
            arr4[i] = parseInt(prompt("请输入第" + (i + 1) + "个的数值"));
        }
        console.log(arr4);

数组的属性

数组名.length 返回数组的长度 数组的数据类型,object 遍历数组(循环数组)

    // unshift:在数组前面增加新元素,原数组改变
        var arr = [2, 3, 47, 5, 6, 7, 8];
        var res = arr.unshift(99, [15, 87], 888)
        console.log(res);  //返回的是数组的长度
        console.log(arr);

        //push,后增,在数组后面增加新元素,原数组改变
        var arr1 = [2, 3, 47, 5, 6, 7, 8];
        var res1 = arr1.push(999);
        console.log(res1);
        console.log(arr1);

        //shift:删除数组首部的元素,一次只能删除一个。返回值是被删除的元素,影响原数组
        var arr2 = [2, 3, 47, 5, 6, 7, 8];
        var res2 = arr2.shift();
        console.log(res2);  //2
        console.log(arr2);

        //pop:删除数组尾部的元素,一次只能删除一个。返回值是被删除的元素,影响原数组
        var arr3 = [2, 3, 47, 5, 6, 7, 8];
        var res3 = arr3.pop();
        console.log(arr3);
        console.log(res3);

        //splice:(从哪个下标开始,删除的长度,新增的元素)。返回值是被删除的元素数组,会影响原数组
        var arr4 = [5, 6, 7, 8, 9];
        var res4 = arr4.splice(2);
        console.log(arr4);  // 5,6
        console.log(res4);  // 7,8,9

        var arr5 = [7, 8, 9, 10, 11];
        var res5 = arr5.splice(2, 2);
        console.log(arr5);  //7,8,11
        console.log(res5);  //9,10

        var arr6 = [11, 22, 33, 44, 55, 66, 77];
        var res6 = arr6.splice(2, 0, [1, 2, 3], true);
        console.log(arr6);  //[11, 22, [1, 2, 3], true, 33, 44, 55, 66, 77]
        console.log(res6);  //[]

        //concat拼接后新数组,不影响原数组(新数组中有数组,则将最外层数组拆开进行拼接)
        var arr7 = [5, 6, 7, 8, 9];
        var res7 = arr7.concat(-4, -2, [2, 3, [4, 6]], 10)
        // [5, 6, 7, 8, 9, -4, -2, 2, 3, Array(2), 10]
        console.log(res7);
        console.log(arr7);
        // [5, 6, 7, 8, 9]

        //slice(start,end).被截取的新数组,不影响原数组
        var arr8 = [2, 3, 4, 5, 6, 7];
        var res8 = arr8.slice(2);
        console.log(res8);  //[4, 5, 6, 7]
        console.log(arr8);  //[2, 3, 4, 5, 6, 7]

        var res9 = arr8.slice(2, 4);
        console.log(res9);  //[4, 5]

建立新的空数组,内存空间指向不一样,就不会改一处而全都改变。

//复制
        var arr10 = [5, 6, 7, 8, 9];
        var list = [];
        function fnCopyArr(arr10) {
            return arr10.slice(0)
        }
        list = fnCopyArr(arr10);
        arr10[0] = 4
        console.log(arr10, list)    //[4, 6, 7, 8, 9][5, 6, 7, 8, 9]


        var arr11 = [5, 6, 7, 8, 9];
        var list1 = [];
        function fnCopyArr1(arr11) {
            return arr11.concat()
        }
        list1 = fnCopyArr1(arr11);
        arr11[0] = 1
        console.log(arr11, list1)
        //[1, 6, 7, 8, 9] & [5, 6, 7, 8, 9]