目录
ES5定义了5种迭代方法:every(),filter(),forEach(),map(),some()
每个方法都接受两个参数:1.要在每一项上运行的函数。2.运行该函数的作用域对象————影响this的值(可选)
要在每一项上运行的函数接收三个参数:1.数组项的值(item)。2.该项在数组中的位置(index)。3.数组对象本身(array)
every()————对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
var everyResult=numbers.every(function(item,index,array){
return item>2;
});
alert(everyResult);//false
some()————对数组中的每一项运行给定函数。如果函数对任一项返回true则返回true
var someResult=numbers.some(function(item,index,array){
return item>2;
});
alert(someResult);//true
filter()————对数组中的每一项运行给定函数,返回该函数回返回true的项组成的数组
var filterResult=numbers.filter(function(item,index,array){
return item>2;
});
console.log(filterResult);//[3,4,5,4,3]
map()————对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组
var mapResult=numbers.map(function(item,index,array){
return item*2;
});
console.log(mapResult);//[2,4,6,8,10,8,6,4,2]
console.log(numbers);//[1,2,3,4,5,4,3,2,1]
forEach()————对数组中的每一项运行给定函数,这个方法没有返回值
var newArr=[];
numbers.forEach(function(item,index,array){
if(item>2){
newArr.push(array[index]*2);
}
});
console.log(newArr);//[6,8,10,8,6]
迭代方法接收的第二个值
var arr = [5, 10, 15, 15, 14, 58];
var obj = {
a: 0
};
arr.forEach(function (item, index, array) {
if (item > 5) {
this.a += 1;
}
}, obj);
console.log(obj.a);//5
接收一个对象,确定this的指向。
总结说人话
- 五个数组的迭代函数都接受一个函数用来处理数组。而用以处理数组的函数接受三个值:item(数组中对应项本身的值),index(数组中对应项的序数),array(数组对象本身)
- some和every用来判断数组中每一项是否满足函数的判断要求(比如要求大于某某数),且处理函数必须对每一项返回true或者false,当任意一项经过函数处理后返回true,some方法即返回true。当全部项返回true,every方法返回true。
- filter要求处理函数必须返回true,若处理函数在处理数组某一项时返回true,则将这一item添加到一个新数组中,最后返回全部被处理函数返回true的item组成的新数组。
- map不要求处理函数返回true,但它要求处理函数返回经过处理的item,并将其组成新数组进行返回。
- forEach没有返回值。它会把每一项都进行处理或者判断。但凡需要对数组每一项进行同样的处理或者判断均可使用这个函数。
- 以上五个函数都不会对原数组进行任何修改。