数组的各种方法,遍历数组
数组
数组里面的所有内容称为元素,简称元
每个元素,对应的一个索引数,这个索引数叫做下标
根据变量[下标]就可以获取到这个变量数组的下标所对应索引的元素
arr[0]=1
1元素
arr 数组变量
0下标 索引值
arr[0] 下标变量
下标是从0开始,第一个元素对一个的下标是0
因为这个100表示第101个元素,因此,数组先有101个元素,可是原数组只有4个元素,就会自动生成96个元素,在里面,这些都是空元素
arr[100]=20;
length 长度 数组的元素数量
length是最大下标+1 最大下标=length-1
console.log(arr.length);
在末尾添加元素1
arr[arr.length]=1;
修改最后一个元素的结果
arr[arr.length-1]=10;
如果设置的length的长度比原有的长度大,这就会将数组的元素数量增多,并且补充空元素在数组末尾
arr.length=10;
如果设置的length的长度比原有的长度小,这就将数组的元素进行删除,只保留给定的长度
arr.length=2
如果length为0时,表示清空数组
arr.length=0
如果设置length--时,表示删除数组的最后一个元素
arr.length--
数组的方法
数组只要改变长度就会改变
数值没有引用关系
push 给数组的尾部添加一个或者多个元素,返回数组的新长度,改变原数组,改变数组的长度
unshift 尽量不要使用unshift
在数组的最前面添加一个或者多个元素,并且返回数组的新长度,改变原数组,改变数组的长度
pop 删除数组尾部的一个元素,并且将这个删除元素返回,改变原数组,改变数组长度
shift 删除数组头部的一个元素,并且将这个删除元素返回,改变原数组,改变数组长度
//第一种
var len=arr.length;
for(var i=0;i<len;i++){
arr.pop();
}
console.log(arr);
//第二种
while(arr.length>0) arr.pop();
console.log(arr);
//第三种
var item=arr.shift();
console.log(arr,item);
concat 将多个数组及元素合并为一个新数组,原数组不发生改变
连接一个数组
var arr2=arr.concat(arr1);
连接多个数组
var arr2=arr.concat(arr1,[9,10,11]);
连接多个数组及元素
var arr2=arr.concat(arr1,9,10,[11,12],13);
复制一个新数组,浅复制
var arr2=arr.concat();
toString 将数组转换为字符串,使用逗号(,)链接每个元素,并且返回这个字符串,原数组不发生改变
数组隐式转换为字符串时,会自动调用toString
join 将数组以给入的参数作为间隔符 连接为一个字符串,如果间隔符是空字符串,则将每个元素紧密连接在一起,返回这个字符串,原数组不发生改变
slice 将数组中第几位开始到第几位之前的所有元素截取返回一个新数组,原数组不变
slice(开始位置,结束位置)
arr.slice();开始位置没有赋值,结束位置也没有赋值,开始位置默认从0开始,结束位置默认到数组尾部,这样做可以复制数组
var arr1=arr.slice(2);结束位置没有赋值,默认到数组尾部
开始和结束位置都可以给负数,负数就是倒数第几位,也可以使用arr.length+(负数)
连缀 用前面方法返回得到结果用于后面的方法
var str=arr.slice(-3).join("");
console.log(str);
splice
在数组中删除,替换,插入,新的多个元素,改变原数组,并且返回一个由删除元素组成的新数组
arr.splice(开始位置,删除几个,插入的元素...)
var arr1=arr.splice();
如果没有开始位置,不会删除元素,返回一个空数组
var arr1=arr.splice(2);
如果只有开始位置,没有删除几个,就会删除到数组的尾部
var arr1=arr.splice(1,2);
从下标为1的位置开始删除2个元素,返回被删除的这两个元素
var arr1=arr.splice(1,2,"z");
从下标为1的位置开始删除2个元素,并且在这个位置插入一个字符z,返回被删除的两个元素组成的新数组
var arr1=arr.splice(1,2,"y","z");
var arr1=arr.splice(1,0,"y","z");
如果删除的数量为0时,表示不删除,在这个位置插入y,z两个字符,并且返回一个空数组
数组遍历
for和for in区别
1.for会遍历到空元素,但是for in不会遍历到
for in遍历时 主要是针对对象,目的时遍历key value这种键值对,因此for in使用变量会自动转换为字符串,数组是由对象创建来的,所以可以理解为数组中的下标就相当于对象中key,元素相当于对象中value,for in的前提必须是键值对,也就是说必须由键有值,数组中空元素,仅有下标没有值,不能成为键值对,因此,在for in中不做遍历
2.for循环时仅遍历数组的元素,但是for in循环时会遍历到数组元素之外的数组属性
var arr=["a",,"b","c",undefined,"d","e","f"];
arr.a=10;
for(var i=0;i<arr.length;i++){
if(i in arr) console.log(arr[i]);
}
forEach 遍历数组的每个元素,并且执行forEcah函数中回调函数
arr.forEach(回调函数) 回调函数中里面有3个参数,分别对应的是数组的元素,下标,数组本身
arr.forEach(function(item){
})
map 遍历数组的每个元素,并且执行map函数中回调函数,将这个回调函数中return的结果分别储存在一个新数组的当前下标对应位置,并且返回这个新数组,原数组不改变
for Each 和map的区别
forEach仅遍历数组的每个元素,map不但遍历数组的每个元素,还会将回调函数中return返回的结果放在一个新数组对应下标的位置,返回这个新数组,map使用后,返回的新数组与数组的长度相等
如果没有使用return返回,该项就是undefined
indexOf
arr.indexOf(元素,从下标第几位开始向后查找)
查找元素所对应的下标,如果找到了就返回第一个下标,如果没有找到返回-1;
lastIndexOf
arr.laseIndexOf(元素,从下标第几位开始向后查找)
从后向前查找元素所对应的下标,如果找到了就返回找到第一个下标,如果没有找到返回-1
includes
arr.includes(元素);
判断当前数组中是否有这个元素,如果有返回true,否则返回false