数组
- 数组也是一个对象
- 普通对象是使用字符串作为属性名的,而数组时使用数字来作为索引操作元素
- 数组中的元素可以是任意的数据类型,可以是对象
创建数组
- 声明或创建一个不指定长度的数组 var arr = new Array();- 声明或创建一个指定长度的数组 var arr = new Array(10); //创建一个length为10的数组,没有值- 声明或创建一个带有默认值的数组 var arr = new Array(1, 2, 3); //length为3,值为[1, 2, 3]- 使用字面量创建数组 var arr = [1, 2, 3, 4, 5] //length为5,值为[1, 2, 3, 4, 5]
//创建不定长度的数组 var arr2 = [];-
读取数组中的元素
- 语法: 数组[索引] arr[2]
- 如果读取不存在的索引,他不会报错而是返回undefined
-
length
-
length是数组的一个属性,代表数组的长度
-
获取数组的长度
-
可以使用length属性来获取数组的长度(元素的个数)
-
语法: 数组.length
var arr=[1,2,3]; //arr.length = 3;console.log(arr.length);//输出数组长度 -
对于连续的数组,使用length可以获取到数组的长度(元素的个数)
-
对于非连续的数组,使用length会获取到数组的最大的索引+1
-
尽量不要创建非连续的数组
-
-
修改length
- 如果修改的length大于原长度,则多出部分会空出来
- 如果修改的length小于原长度,则多出的元素会被删除,所以可以修改length的长度为0来让数组为空
-
向数组的最后一个位置添加元素
-
语法: 数组[数组.length] = 值;
arr[arr.length] = 10;
-
-
数组的方法
push()
- 该方法可以向数组的末尾添加一个或多个元素,并返回数组的新的长度- 可以将要添加的元素作为方法的参数传递,这样这些元素将会自动添加到数组的末尾- 该方法会将数组新的长度作为返回值返回 var arr = [1, 2, 3];
var result = arr.push(0);//arr = [1, 2, 3, 4], result = 4pop()
- 该方法可以删除数组的最后一个元素,并将被删除的元素作为返回值返回 var arr = [1, 2, 3]; var result = arr.pop(); // result = 3, arr = [1, 2]
unshift()
- 向数组开头添加一个或多个元素,并返回新的数组长度
- 向前边插入元素以后,其他的元素索引会依次调整 var arr = [1, 2, 3]; var result = arr.unshift(4, 5); // result = 5, arr = [ 4, 5, 1, 2, 3 ]
shift()
- 可以删除数组的第一个元素,并将被删除的元素作为返回值返回 var arr = [1, 2, 3]; var result = arr.shift(); // result = 1, arr = [2, 3]
slice()
-
可以用来从数组提取指定元素
-
该方法不会改变元素数组, 而是将截取到的元素封装到一个新数组中返回 参数: 第一个,截取开始的位置的索引, 包含开始索引 第二个,截取结束的位置的索引, 不包含结束索引
var arr = ["a", "b", "c", "d"];var result = arr.slice(2, 3); // result = [ 'c' ], arr = [ 'a', 'b', 'c', 'd' ]result = arr.slice(2); // result = [ 'c', 'd' ], arr = [ 'a', 'b', 'c', 'd' ] -
第二个参数可以省略不写, 此时会截取从开始索引往后的所有元素
-
索引可以传递一个负值, 如果传递一个负值, 则从后往前计算 - 1 倒数第一个 - 2 倒数第二个
splice()
- 可以用于删除数组中的指定元素,并向数组中添加新元素- 使用splice()会**影响到原数组**,会将指定元素从原数组中删除,并将被删除的元素作为返回值返回- 参数:- 第一个,表示开始位置的索引- 第二个,表示删除的数量- 第三个及以后。。 可以传递一些新的元素,这些元素将会自动插入到开始位置索引前边 var arr = ["a", "b", "c", "d"];
var result = arr.splice(1,2); // result = [ 'b', 'c' ], arr = [ 'a', 'd' ] var result = arr.splice(1, 2, "e", "f"); // result = [ 'b', 'c' ], arr = [ 'a', 'e', 'f', 'd' ]concat()
-
concat()可以连接两个或多个数组,并将新的数组返回
-
该方法不会对原数组产生影响 var arr1 = [“a”, “b”, “c”]; var arr2 = [“1”, “2”, “3”];
var result = arr1.concat(arr2); // result = [ 'a', 'b', 'c', '1', '2', '3' ]
join()
-
该方法可以将数组转换为一个字符串
-
该方法不会对原数组产生影响,而是将转换后的字符串作为结果返回
-
在join()中可以指定一个字符串作为参数,这个字符串将会成为数组中元素的连接符,如果不指定连接符,则默认使用,作为连接符,如果指定为空,则会直接将字符连接 var arr1 = [“a”, “b”, “c”];
var result = arr1.join();// result = a,b,cvar result = arr1.join("@_&"); // result = a@_&b@_&cvar result = arr1.join(""); // result = abc
reverse()
-
该方法用来反转数组(前边的去后边,后边的去前边)
-
该方法会直接修改原数组 var arr1 = [“a”, “b”, “c”];
var result = arr1.reverse();console.log(result); //result = [ 'c', 'b', 'a' ]console.log(arr1); // arr1 = [ 'c', 'b', 'a' ]
sort()
-
可以用来对数组中的元素进行排序
-
也会影响原数组,默认会按照Unicode编码进行排序 //字符型数组 var arr1 = [“b”, “d”, “a”, “c”]; var result = arr1.sort(); console.log(result); //[ ‘a’, ‘b’, ‘c’, ‘d’ ] console.log(arr1); //[ ‘a’, ‘b’, ‘c’, ‘d’ ]
//number型数组,以Unicode编码进行排序var arr2 = [2, 5, 7, 21, 13];var result = arr2.sort();console.log(result); //[ 13, 2, 21, 5, 7 ]console.log(arr2); // [ 13, 2, 21, 5, 7 ] -
对于number型数组,我们可以自己来指定排序的规则
-
我们可以在sort()添加一个回调函数,来指定排序规则,回调函数中需要定义两个形参,浏览器将会分别使用数组中的元素作为实参去调用回调函数
-
浏览器会根据回调函数的返回值来决定元素的顺序:
-
如果返回一个大于0的值,则元素会交换位置
-
如果返回一个小于0的值,则元素位置不变
-
如果返回一个0,则认为两个元素相等,也不交换位置
var result = arr2.sort(function(a, b){/*if(a > b){return -1;}else if(a < b){return 1;}else{return 0;}/*return a - b;//升序,return b - a 则降序});console.log(result); //[ 2, 5, 7, 13, 21 ]console.log(arr2); //[ 2, 5, 7, 13, 21 ]
如果需要升序排列,则返回 a - b 如果需要降序排列,则返回 b - a
-
-
数组的遍历
forEach()
-
forEach()方法需要一个函数作为参数
-
数组中有几个元素函数就会执行几次,每次执行时,浏览器会将遍历到的元素以实参的形式传递进来,我们可以来定义形参,来读取这些内容
-
浏览器会在回调函数中传递三个参数:
- 第一个参数(value),就是当前正在遍历的元素
- 第二个参数(index),就是当前正在遍历的元素的索引
- 第三个参数(object),就是正在遍历的数组 arr.forEach(function(value , index , obj){ console.log(value); });
-
列如: 去除数组arr中重复的数字 var arr = [1,2,3,2,2,1,3,4,2,5];
//for循环方式遍历for(var i = 0; i < arr.length; i++){for(var j = i + 1; j < arr.length; j++){if(arr[i] == arr[j]){arr.splice(j,1);j--;}}}//forEach方式遍历arr.forEach(function(num, i, arr){ //num相当于arr[i]for(var j = i + 1; j < arr.length - 1; j++){if(num == arr[j]){arr.splice(j, 1);j--;}}});console.log(arr);
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!














