数组
数据结构 数据的结构形态 数据表现时的形态方式
var a=1;
var b=2;
var c=3;
var d=4;
var obj={a:1,b:2,c:3,d:4};
不关心key,只关心值,并且希望值可以排序,希望可以统计到数据的数量
数组 数据组合 一组数据
var arr=[1,2,3,4];
数组如何创建
字面量创建
var arr=[1,2,3,4];
实例化创建 按照实际案例的格式化创建出来
var arr=new Array();
构造函数创建
var arr=Array();
**对象创建,用的不多
var arr=new Object([1,2,3]);
Invalid array length 长度错误
使用new Array或者Array 时,如果,参数只有一个, 并且是数值类型,这个数值就是
数组创建的长度,并且放入对应个数的空元素,所以这个数值必须是正整数,如果是小数
或者负数时,就会抛出错误
删除线格式 数组的下标
数组里面的所有内容称为元素,简称元
每个元素,对应的一个索引数,这个索引数叫做下标
根据变量[下标]就可以获取到这个变量数组的下标所对应索引的元素
console.log(arr[0]);
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;
如果设置的length的长度比原有的长度大,这就会将数组的元素数量增多,并且补充空元素在数组末尾
arr.length=10;
如果设置的length的长度比原有的长度小,这就将数组的元素进行删除,只保留给定的长度
arr.length=2;
如果设置length为0时,表示清空数组
arr.legnth=0;
如果设置length--时,表示删除数组的最后一个元素
arr.length--;
push与unshift
push(返回数组新长度) 给数组的尾部添加一个或者多个元素,**改变原数组**。
unshift (返回数组的新长度)给数组的头部添加一个或者多个元素,**改变原数组**
pop 与 shift
pop 删除数组尾部的一个元素,并且将这个删除的元素返回,改变原数组,改变数组的长度
shift 删除数组头部的一个元素,并且将这个删除的元素返回,改变原数组,改变数组的长度
concat,join与tostring
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
将数组转换为字符串,使用,连接每个元素,并且返回这个字符串,原数组不发生改变
join(返回拼接之后的字符串)
将数组以给入的参数作为间隔符连接为一个字符串,如果间隔符是空字符串,则将每个元素紧密连接在一起,返回这个字符串,原数组不发生改变
slice(返回新数组)
将数组中第几位开始到第几位之前的所有元素截取返回一个新数组,原数组不变
arr.slice(); 开始位置没有赋值,结束位置也没有赋值,开始位置默认从0开始,结束位置默认到数组尾部,这样做可以复制数组
var arr1=arr.slice(2); 结束位置也没有赋值,结束位置默认到数组尾部
开始和结束位置都可以给负数,负数就是倒数第几位,也可以使用arr.length+(负数)
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
遍历数组的每个元素,并且执行forEach函数中回调函数
arr.forEach(回调函数) 回调函数中里面有3个参数,分别对应的是数组的元素,下标,数组本身
arr.forEach(function(item){
})
map
遍历数组的每个元素,并且执行map函数中回调函数,将这个回调函数中return的结果分别存储在
一个新数组的当前下标对应位置,并且返回这个新数组,原数组不改变
var arr1=arr.map(function(item){
return value
})
forEach和map的区别
forEach仅遍历数组的每个元素,map不但遍历数组的每个元素,还会将回调函数中return返回的结果
放在一个新数组对应下标的位置,返回这个新数组,map使用后,返回的新数组与数组的长度相等
如果没有使用return,则该项就是undefined(所以不能作为筛选使用)
indexOf
arr.indexOf(元素)
查找元素所对应的下标,如果找到了就返回找到第一个下标,如果没有找到返回-1
lastIndexOf
arr.lastIndexOf(元素)
从后向前查找元素所对应的下标,如果找到了就返回找到第一个下标,如果没有找到返回-1
includes
arr.includes(元素);
判断当前数组中是否有这个元素,如果有返回true,否则返回false