数组方法
1.join()
,数组转字符串,原数组没有被修改。
可选参数:一个字符串参数。数组的join()
方法的实现:先把所有的单个元素都转成字符串,然后按照参数链接每单个元素,不传参数时,默认用","
链接每单个元素。
var arr=[1,2,3,4,5];
var str=arr.join();
str;//"1,2,3,4,5"
var str2=arr.join("-");
str2;//"1-2-3-4-5"
var arr2=str2.split("-"); //split()是字符串的方法
arr2;//[1,2,3,4,5]
2.reverse()
,数组倒序排序,数组被修改。
var arr=[5,4,3,2,1];
arr.reverse();
arr;//[1,2,3,4,5]
3.sort()
,排序方法,数组被修改。
可选参数:为一个比较函数,不传时,按字母表顺序排序(如有必要转化成字符串比较)。
var arr=[2,3,1,"a","A","b","B"];
arr.sort(); //不穿参数,按字母表顺序排序
arr;//[1,2,3,A,B,a,b]
arr.sort(function(a,b){ //小到大排序
return a-b;
});
arr.sort(function(a,b){ //大到小排序
return b-a;
});
var arr2=["But","add","Add","but"];
arr2.sort(function(a,b){
var x=a.toLowerCase();
var y=b.toLoweCase();
if(x>y) return 1;
if(x<y) return -1;
return 0;
});
arr2;//["add","Add","But","but"]
4.concat()
,不会修改调用的数组,创建并返回一个新数组,包含调用数组的元素和参数,如果参数是是数组,链接的是数组元素而非数组本身。
var arr=[1,2,3];
arr.concat(4,5);//返回[1,2,3,4,5]
arr.concat(4,5);//返回[1,2,3,4,5] 之前的调用concat()并没有修改调用的数组
arr.concat(4,[5,6]); //返回[1,2,3,4,5,6] 参数是数组的,链接的元素而非本身
arr.concat(4,[5,[6]]);//返回[1,2,3,4,5,[6]]
5.slice()
,不会修改调用的数组,返回一个子数组,参数指定的是调用数组的索引,即开始和结束的位置,可以是0
个、1
个或2
个,无参数时返回调用数组具有相同元素的另个数组,参数为1
个时返回调用数组索引大于等于1
的元素,索引为2
个时返回第一个索引和最后一个索引之间的元素,包含第一个索引的元素,不包含最后一个索引的元素。
var arr=[1,2,3,4,5];
arr.slice();//返回另一个具有相同元素的数组[1,2,3,4,5]
arr.slice(1);//返回[2,3,4,5]
arr.slice(-1); //返回[5] 最后一个元素为-1,倒数第二个为-2,依次类推
arr.slice(1,-1);//返回[2,3,4] 包含第一个索引的元素,不包含第二个索引的元素
6.splice()
,返回一个被删除的元素组成的数组,会修改调用数组,第一个参数必须,可传入1以上的参数,第一个参数为要开始删除的索引,第二个参数为要删除几个,后面的参数为要插入的元素。
var arr=[1,2,3,4,5,6];
arr.splice(4);//返回[5,6], arr为[1,2,3,4]
arr.splice(1,1);//返回[2],arr为[1,3,4]
arr.splice(1,2,"a","b"); //返回[3,4], arr为[1,a,b]
arr.splice(0,0,"A","B"); //返回[],arr为["A","B",1,a,b]
7、pop()
和push()
,shift()
和unshift()
var arr=[1,2,3];
arr.push(4);//返回arr的新长度4,push在末尾添加一个或多个元素
arr;//返回[1,2,3,4]
arr.pop();//没有参数,去掉数组最末尾的一个元素,返回被删除的元素
arr;//返回[1,2,3]
arr.unshift(0);//在数组最前面添加一个或多个元素,返回数组最新的长度
arr.shift();//删除数组第一个元素,返回被删除的元素
8、toString()
和toLocaleString()
,
var arr=[1,2,"a",[["b"]]];
arr.toString();//"1,2,a,b"
//toString()和没有传参数的join()方法返回的是一样的字符串,toLocaleString()返回本地化字符串,很少用
前面我们介绍了ECMAscript3的数组方法,下面是ECMAscript5的数组方法:
1、forEach()
;通常我们传入一个函数,传入的函数有三个参数,第一个指代数组元素,第二个指代数组元素的索引,第三个指代数组本身。
var arr=[1,2,3,4,5];
var sum=0;
arr.forEach(function(v,i,a){
sum+=v+1;//另一种写法sum+=a[i]+1;
});
sum;//20,
arr;//[1,2,3,4,5],
arr.forEach(function(v,i,a){
a[i]=v+1;
});
arr;//[2,3,4,5,6];
//forEach()方法,没有返回值。可以用来修改调用数组,和一些计算。
2、map()
;参数参考forEach()
;
var arr=[1,2,3,4,5];
var result=arr.map(function(v,i,a){
return v-1;
});
result;//[0,1,2,3,4];
map();//返回一个新的数组,调用数组没有被修改。
3、some()
;参数传入一个函数,函数有一个参数指代数组元素。返回一个布尔值。
var arr=[1,2,3,4,5];
var result=arr.some(function(x){
return x%2===0;
});
result;//true,其中2,4是偶数
//some()方法只要有一个或多个满足条件都会返回true
4、every()
;参数参考some()
,返回一个布尔值。
var arr=[1,2,3,4,5];
var result=arr.every(function(x){
return x%2===0;
});
result;//false,不是所有的元素都是偶数。
//方法every();所有的元素满足条件才返回true;
5、filter()
;参数传入一个函数,函数有个一参数指代元素。根据条件过滤掉某些元素,返回一个新数组,没有改变调用数组。filter()
方法可以过滤掉稀疏数组,返回的新数组总是稠密的。
var arr=[1,2,3,4,5];
var result=arr.filter(function(){
return x>1;
});
result;[2,3,4,5];
var arr2=[0,1,undefined,,null,""];
var result2=arr2.filter(function(x){
return x!==undefined && x!==null && x!=="";
});
result2;//[0,1];过滤掉undefined,null和空字符串
6、indexOf()
和lastIndexOf()
,参数为一个指定要搜索的元素;有则返回索引值,没有返回-1
,indexOf()
从前面开始搜索,lastIndexOf()
从后搜索。这两个方法都有第二个参数表从哪里开始搜索。
var arr=[0,1,2,3,0];
var result=arr.indexOf(0);
result;//从数组前面搜索,返回第一个匹配的索引值
var result2=arr.lastIndexOf(0);
result2;//返回4,从数组后面搜索,返回第一个匹配的索引值
var result3=arr.indexOf(4);
result2;//返回-1,数组不存在4这个元素。
var result4 =arr.indexOf(0,1);
result4;//返回4,从1的位置开始搜索第一个0元素。
//我们也可以把数组所有的0元素找出来:
var arr=[0,1,0,2,0,3,0,4];
function findAll(a,x){ //传入2个参数,被遍历的数组和被搜索的元素
var arr2=[];
var pos=0;
while(pos<a.length){
pos=a.indexOf(x,pos);
if(pos==-1) break;
arr2.push(pos);
pos++;
}
return arr2;
}
var result=findAll(arr,0);
result;//[0,2,4,6],result是arr中0元素的索引集合
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。