数组作为js中比较常用的一个容器,简单记录一些常用的方法,作为查询工具使用;
1 声明,验证;
var array1=new Array();//比较标准的方式
var array2=[];//也可以随意一些,据说此种方式效率更高一些;推荐此种
var array3=[1,2,3,4];//直接初始化
//Array.isArray(判断对象是否是数组)
Array.isArray(array3);//true
2 添加移除元素;
2.1 array.push(item...);array.unshift(item...);array.pop();array.shift();
//push()pop()
var array1=[];
array1[0]=1;//直接赋值,且不用担心下标越界的问题
array1.push(2);//直接在后面追加
array1.push(3);// array1[1,2,3]
array1.pop();//末尾删除 类似堆栈(stack) array1[1,2]
array1.push(3,4);//也可以同时多个 array1[1,2,3,4]
array1.push([5,6,7,],8);//不限制类型 array1[1,2,3,4,[5,6,7],8]
//unshift(),shift()
var array2=[2,3,4];//
array2.unshift(1);//头部添加 array2[1,2,3,4]
array2.shift();//头部珊瑚 array2[2,3,4]
2.2 splice();从指定位置添加删除元素;
2.2.1 splice(startIndex,count,newItem);
startIndex:起始索引,数组添加删除元素的位置-即新元素的位置;
count:要删除的元素数量,如果是0,则不删除;
newItem:要添加的元素,如果不填写,则没有添加新元素;
var arrayS=[1,2,3];
//参数1 splice(index,0,newItem)-添加新元素
arrayS.splice(2,0,'new1');//添加1个
console.log(arrayS);//[1,2,'new1',3]
arrayS.splice(3,0,'new2','new3');//添加多个
console.log(arrayS);//[1,2,'new1','new2','new3',3]
//参数2 splice(index,count)-删除元素
arrayS.splice(2,3);
console.log(arrayS);//[1,2,3]
//参数2 splice(index,count,newItem)-移除元素并替换
arrayS.splice(2,1,[3,4,5,6]);
console.log(arrayS);//[1,2,[3,4,5,6]]
3 遍历迭代-forEach;for 循环;every();some();reduce();map();filter();
3.1 forEach
var array1=[10,20,30,40];
//循环前一般需要做下判断
if(array1&&array1.length){
//TO-DO
}else{
//数组不存在或者 为空的情况
}
//1 forEach
array1.forEach(function(item,index){//forEach;比较少用
console.log('forE:'+item);
});
array1.forEach((i,index)=>{//forEach + Lambda表达式
console.log("forEach:"+i);
});
3.2 for循环
//2 for循环
for(var a in array1){// 不考虑顺序可以用;比较少用
console.log('a:'+array1[a]);
}
for(var i=0;i<array1.length;i++){//普通for循环 排序时使用;一般的用法
console.log('for:'+array1[i]);
}
for(var i=0,j=0;j=array1.length,i<j;i++){//数组比较大时的一点儿优化
console.log('forj:'+array1[i]);
}
3.3 every(),some()
//3.3 every() 与some()
//3.3.1 every()该方法接受一个返回为布尔值的函数,若数组所有元素均返回true,则结果为true
//3.3.2 some() 类似every(),只不过是只要 有一个元素返回true,则结果为true;
//some()与every() 类似于逻辑运算 or与and
var array3=[1,2,3,4,5,6,7,8];
var array4=[2,4,6,8];
var isEven=function(num){//是否为偶数
return num%2==0;
}
var even1=array3.every(isEven);
var even2=array4.every(isEven);
var even3=array3.some(isEven);
var even4=array4.some(isEven);
console.log(even1,even2,even3,even4);//false true true true
3.4 reduce(),reduceRight();
//4 reduce()方法接受一个函数 ,该函数依次作用于数组中的元素,最终返回一个值;
//执行顺序大概是
//var result1= func(index1 index2);var result2= func(result,index3),依次类推;
//使用场景:求累加值等
var add=function(num1,num2){
return num1+num2;
}
var array5=[1,2,3,4,5,6,7,8,9,10];
var total=array5.reduce(add);
console.log(total);//55
//4.1 reduceRight()方法, reduce()的变种,原理就是 array.reverse()+reduce();执行顺序 由后往前;
var contact=function(item1,item2){
return item1+item2;
}
var array6=['how ','are ','you '];
console.log(array6.reduceRight(contact));//you are how
3.5 map();与every()类似,方法接收一个函数,数组中所有元素依次执行,返回的新值会生成一个新的数组;
var add5=function(item){
return item+5;
}
var array7=[1,2,3,4,5];
var newArray7=array7.map(add5);
console.log(newArray7);//6,7,8,9,10
console.log(array7);//1,2,3,4,5
//注意如果数组内是个对象数组
var array8=[{data:1},{data:2},{data:3}, {data:4},{data:5}]
var array9=array8.map((item, idx) => {
item.data=item.data+5//array8的内容会改变
return item;
});
console.log(array8);//?
console.log(array9);//?
3.6 filter(),过滤方法-接受一个函数,数组每个元素依次执行,满足条件的元素生成一个新的数组;
//基数
var isOdd=function(num){
return num%2!=0;
}
var array10=[1,2,3,4,5,6,7,8];
var newArray10=array10.filter(isOdd);
console.log(newArray10);//[1,3,5,7]
4 复制,检索array.slice(start,end);索引位置包含start,不包含end;
array.indexOf();
//slice方法针对array中的一段做浅复制
//第一个参数是起始位置,第二个可选,默认是数组的长度
//一般来说 截取后的值a + 截取后的数组值就是 截取前完整的数组的值
var array11=[1,2,3,4,5,6,7];
var array11Slice=array11.slice(1,3);
console.log(array11Slice);//[2,3]
console.log(array11);//[1,2,3,4,5,6,7]
//indexOf 判断数组是否包含某个元素,一般可以配合 splice方法删除元素
//当然返回的结果是第一个匹配成功的,若需要全部删除还需要另外考虑
var array4=[111,222,333];
var index = array4.indexOf(222);//index==1
if(index > -1) {
array4.splice(index, 1);//array4-[111,333]
}
5 反转, array.reverse();
var array12=[1,2,3,4,5]
array12.reverse();
console.log(array12);//[5,4,3,2,1]