1

数组方法
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元素的索引集合

君莫言
21 声望9 粉丝

做人如果没梦想,跟咸鱼有什么分别?