七.ECMAScript5关于数组的新方法
1.forEach():遍历数组,并为每个元素调用传入的函数;
举例:
1 var a = [1,2,3]; 2 var sum = 0; 3 //传一个参数 4 a.forEach(function(v){ 5 sum += v; 6 }); 7 console.log(sum);//6 8 //传三个参数(元素值,索引,数组本身) 9 a.forEach(function(v,i,a){ 10 a[i]=v+1;//为数组的各元素自加1 11 }) 12 console.log(a);//[2,3,4]
2.map():将调用该函数的数组的每个元素都传入指定函数,并返回运算后的新数组;
注意:该函数不修改原数组.
举例:
1 var a = [1,2,3]; 2 var b = a.map(function(x){ 3 return x*x; 4 }) 5 console.log(b);//[1,4,9]
3.filter():将调用该函数的数组的每个元素传入指定函数进行判定,若判定为true,则返回.最终返回一个符合指定条件(函数)的元素的集合(该集合为原数组的子集)
注:该函数会跳过稀疏数组中缺少的元素,总是返回稠密数组,利用此特性可以压缩稀疏数组.
举例1:
1 var a = [1,2,3]; 2 var c = a.filter(function(x){ 3 return x<3; 4 }) 5 console.log(c);
举例2:
1 var a = [ ,1,null,3,4, ,]; 2 console.log(a.length);//6 3 var dense = a.filter(function(){ 4 return true;//过滤掉undefined 5 }); 6 console.log(dense);//[1,null,3,4] 7 console.log(a);//Array(6) […, 1, null, 3, 4]未改变原有数组 8 var c = a.filter(function(x){ 9 return x!=undefined && x != null; 10 }); 11 console.log(c);//Array(3) [1, 3, 4]
4.every():遍历调用该方法数组的每个元素,判定是否符合指定条件(函数),全部符合则返回true;注意空数组调用时返回true;
some():遍历调用该方法数组的每个元素,判定是否符合指定条件(函数),只要有一个符合则返回true;注意空数组调用时返回false;
举例1:
1 var a = [1,2,3,4,5]; 2 var b = a.every(function(x){ 3 return x >0;//判定是否所有元素均大于0 4 }); 5 console.log(b);//true 6 var c = a.some(function(x){ 7 return x < 4; //判定是否有元素小于4 8 }); 9 console.log(c);//true
举例2:空数组调用
1 var d = []; 2 console.log(d.every(function(x){ 3 return x; 4 }));//true 5 console.log(d.some(function(x){ 6 return x; 7 }));//false
5.reduce()和reduceRight()
使用指定的函数对数组元素进行组合,生成单个值.指定函数需要两个值(第一个是执行化简操作的函数;第二个(可选)是传递给函数的初始值)
注意:1)无第二个参数时,函数会调用数组的第一个元素作为初始值,若数组为空数组则报"类型错误"异常;
2)若数组只有一个元素,并且未提供第二个参数,则不会调用函数,只是返回该唯一元素;
举例1:
1 var a = [1,2,3,4,5]; 2 //求和 3 var sum = a.reduce(function(x,y){ 4 return x+y; 5 },0); 6 console.log(sum);//15 7 //求积 8 var mul = a.reduce(function(x,y){ 9 return x*y; 10 },1) 11 console.log(mul);//120 12 //求最大值 13 var max = a.reduce(function(x,y){ 14 return x>y?x:y; 15 },0) 16 console.log(max);//5
举例2:幂运算
1 var a = [2,3]; 2 var big = a.reduceRight(function(x,y){ 3 return Math.pow(y,x); 4 }); 5 console.log(big);//2^3=8 6 7 var big1 = a.reduceRight(function(x,y){ 8 return Math.pow(x,y); 9 }); 10 console.log(big1);//3^2=9 11
6.indexOf()和lastIndexOf()
返回给定索引值的元素,lastIndexOf()从右往左搜索;若没有找到,则返回-1;
注意:该函数可接收两个参数,第一个参数为需要搜索的索引;第二个为开始搜索的位置(可选);两个参数都不为函数;
举例:定义一个函数,查找数组中所有出现的x,并返回包含所有索引的数组
1 function findall(a,x){ 2 var results = []; //定义空数组,用来接收x的索引值 3 len = a.length; //搜索的最大长度 4 pos = 0; //开始搜索的位置 5 while(pos<len){ 6 pos = a.indexOf(x,pos); //从pos开始搜索x 7 if(pos === -1){ 8 break; //找不到就返回 9 } 10 results.push(pos);//存储索引值 11 pos = pos+1; 12 } 13 return results; 14 } 15 测试 16 var a = [1,2,3,2,4]; 17 console.log(findall(a,2));//Array(2) [1, 3]
八.判定是否为数组
Array.isArray():判定是否为数组类型,是则返回true;
九.字符串可以作为只读的数组
可以使用方括号([])访问单个字符;
也可以作用charAt()方法
举例:
1 var s = test; 2 s.charAt(0);//"t" 3 s[0];//"t"
十:需求:将完全由数字组成的字符串转为数字类型,如"1345"转为1345
法一:
1 ‘use strict‘; 2 function string2int(s){ 3 //将s转为字符串数组 4 var str = s.split(‘‘); 5 //调用map()将字符串数组转为数字数组 6 var arr = str.map(function(x){ 7 //字符-0即可变为数字 8 return x-0; 9 }) 10 //调用reduce(),将数字数组转为int类型 11 var res = arr.reduce(function(x,y){ 12 return x*10+y; 13 }) 14 //返回结果 15 return res; 16 }
法二:
1 ‘use strict‘; 2 var b = "1345"; 3 //split():将字符串转为字符类型的数组 4 var c = b.split(‘‘); 5 //与0做减法运算,将字符类型转为数字类型 6 var d = []; 7 for(var i= 0;i<c.length;i++){ 8 d[i]=c[i]-0; 9 } 10 //转为整型 11 var e = d.reduce(function(x,y){ 12 return x*10+y; 13 }) 14 console.log(e);