在javascript中 ,对操作数组的常用方法push();pop();unshift();shift();join();splice();slice();join();split();concat();
等,其实这些方法在ECMAScript3中已经引入,这些方法可以在一定程度上简化对数组的操作,但在ECMAScript5中也引入了一些新的方法,包括对数组的遍历,过虑,化简等操作,这些方法都提供了回调函数,可以让我们在处理数组元素时,更加灵活。
一、关于数组
我们知道,数组可以分为伪数组和真数组,伪数组也有length
属性,但它不能直接使用数组的方法,但我们可以通过 slice();
方法把伪数组转成真数组,例如:Array.prototype.slice.call(arguments,0);
。这个是把参数数组对象转化成真数组,真数组可以使用数组直接量或new Array();
方式生成。
二、ECMAScript5数组方法
1、forEach()
这个方法用来对数组进行遍历,它提供了一个回调有三个参数,回调的第一个参数就是数组元素,第二个是当前元素的索引,第三个是数组本身。例如:
var arr = [1,2,3,4,5];
arr.forEach(function(v,i,a){
a[i]++;
});
console.log(arr)
在这里,我们对每个数组数组元素进行加一操作。最后还需要注意的是,forEach()
函数无法用break
关键字提前终止对数组的遍历,要想提前终止就必须在forEach()
的回调中抛出一个异常,例如:
var arr = [1,2,3,4,5];
try{
arr.forEach(function(v,i,a){
if(i==3){
throw Error('stopIteration');
return ;
}
a[i]++;
});
}catch(e){
}
2、map()
该方法也提供一个回调,这个回调接收每次迭代时的数组元素,并要求返回一个值 ,map()
方法所产生的新数组就是由这个回调的返回值 组成 ,要注意的是,与上述的forEach()
方法不同,它并不会修改原来的数组。
示例:
var arr = [1,2,3,4,5];
var newArr = arr.map(function(v){//每个数组元素加一
return ++v;
});
console.log(newArr)
3、filter()
该方法也提供一个回调,同时也返回一个新数组,新数组的元素是根据回调中设置的条件来确定的。如果某个元素或元素索引符合这个条件,则该元素就会被放到新数组中。
示例:
var arr = [1,2,3,4,5];
var newArr = arr.filter(function(v){//筛选出偶数元素
return v%2===0;
});
console.log(newArr)
4、some()和every()
这两个 方法均返回一个布尔值,也有一个回调,some()
方法是只要数组中有一个元素符合回调中设置的条件则返回true
否则返回false
,而every()
方法正好 相反。
示例:
var arr = [1,2,3,4,5];
var flag = arr.some(function(v){//该处返回true,因为数组中至少有两个偶数
return v%2===0;
});
console.log(flag)
var arr = [1,2,3,4,5];
var flag = arr.every(function(v){//该处返回false,因为数组中并不是每个元素都是偶数
return v%2===0;
});
console.log(flag)
5、reduce()和reduceRight()
这两个 方法用于对数组进行“简化”,方法的第一个参数是一个回调,第二个参数是初始值 (可选项),回调中的第一个参数是在reduce()或reduceRigth()
方法中设置的初始值,后面分别是当前数组元素,数组索引,数组本身,如果没有传入初始值,则使用数组中的第一个元素作为初始值。需要注意的是,如果在一个空数组上调用该方法时,没有传入初始值,则会抛出类型错误异常;如果数组为空,但传入一个初始值或数组只有一个元素,并没有传入初始值,则仅仅是返回这个值,并不会调用那个回调函数。
示例:
var arr = [1,2,3,4,5];
var sum = arr.reduce(function(x,v){
return x+v;
});
console.log(sum);
6、findIndex
该方法返回某个数组元素的索引,如果数组中的某个元素符合回调中设置的条件,则返回这个元素的数组索引,如果没有找到则返回-1,这个比indexOf()和lastIndexOf()
方法更加灵活。
示例:
var param = 'bbb';
var index = ['aaa','bbb','ccc'].findIndex(function(v){//该处返回1
return param === v;
});
console.log(index)