数组内置的一些处理方法
在JS中个,数组是一个Array对象,有它自己内置的方法,今天来说一部分,可以去除循环,来实现对数组的遍历并且进行一定的操作
1.forEach
数组遍历方法,用在数组的遍历上,参数是一个回调函数,函数会传入数组的每一个数值,如果数组索引被修改了,那么遍历会继续沿着索引向下。例如:
1 var array = [1,2,3,4,5]; 2 array.forEach(function(data){ 3 console.log(data);//1,2,3,5 4 if(data==3){ 5 a = array.shift();//shift函数移除数组的第一个元素 6 alert(a);//弹出1 7 } 8 });
2.map
这个方法会返回一个新数组,这个数组里面的值是回调函数里面放回的值。
var array = [1,2,3,4,5]; array = array.map(function(data){//map函数返回一个数组,数组中的每个元素都是回调函数放回的值 return data*2; }); console.log(array);//2,4,6,8,10
3.every
这个方法会根据传入的参数最后返回的boolean值来判断,如果传入的参数的值都满足了回调函数里面的要求,即都返回了true的话,那么every函数也返回true,只要有一个不满足,返回了false的话,那么最后every函数返回的结果就是false
var array = [1,2,3,4,5]; var flag = array.every(function(currentValue){//测试数组中的每一个值是否都满足条件,即都返回true if(currentValue<6){ return true; } }); console.log(flag);//true
4.some
与every函数对应的方法是some,some只需要求传入的参数有一个满足要求,即只需要有一个返回的是true,那么这个函数返回的就是true,要想函数返回的是false,就要求传入的参数都不满足回调函数里的要求,即都是false
var array = [1,2,3,4,5]; var a = array.some(function(currentValue){//只要有满足条件的,就是true return currentValue>4 }); console.log(a);//true
5.filter
这个函数是一个过滤器,会将所有满足条件的函数返回到一个新的数组中,原数组不变,新数组中其实是返回了原数组中满足条件的元素
var array = [1,2,3,4,5]; array = array.filter(function(index) {//返回一个新数组,数组内的元素是满足函数得到的元素 if(index>=4){ return index; } }); console.log(array);//4,5
6.find
返回第一个满足条件的元素
var array = [1,2,3,4,5]; var a=array.find(function(currentValue){//返回第一个满足条件的元素 if(currentValue<3){ return currentValue; }; }); console.log(a);//1
7.findIndex
这个方法和find方法差不多,只是findIndex方法返回的是第一个满足元素的下标
var array = [1,2,3,4,5]; var a=array.findIndex(function(currentValue){//返回第一个满足条件的元素的索引 if(currentValue<3){ return currentValue; }; }); console.log(a);//0
8.reduce
这个函数实现了对数组遍历和累加,累乘的功能
var array = [1,2,3,4]; var a = array.reduce(function(accumulator,currentValue){//从左至右遍历数组,第一个参数是在第一次传参时是数组的第一个值,之后为上一次回调函数返回的值,第二参数为当前值,从2个位置开始。 return accumulator*currentValue;//将数组累乘; });
上面的代码实现了
var array = [1,2,3,4]; function reduce(){ for(var i=0,result=1;i<array.length;i++){ result*=array[i]; } return result; }
但是用reduce没有了循环。
9.reduceRight
这个函数实现的功能和reduce没什么区别,只是reduce从左往右,而reduceRight从右往左
最后说一下,其实以上方法是可以让字符串通过call方法来调用的,功能也是一样的
var str = "Hello World!"; var a = Array.prototype.reduceRight.call(str,function(accumulator,currentValue){//从左至右遍历数组 return accumulator+currentValue; }); console.log(a);
输出就是什么呢?
没错,就是!dlroW olleH
其他的方法也可以通过call的方式来使用在字符串上