一、简述
ECMAScript 5为数组定义了5个迭代方法。每个方法都接收两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域对象。
传入这些方法中的函数会接收三个参数:数组项的值、该项在数组中的位置和数组对象本身。根据使用的方法不同,这个函数执行后的返回值可能会也可能不会影响访问的返回值。以下是这5个迭代方法的作用。
- every():对数组中的每一项运行给定函数,如果该函数对每一项都返回 true ,则返回 true。
- some():对数组中的每一项运行给定函数,如果该函数对任一项返回 true ,则返回 true
- filter():对数组中的每一项运行给定函数,返回该函数会返回 true 的项组成的数组。
- forEach():对数组中的每一项运行给定函数。这个方法没有返回值。
- map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
他们的参数都一样:
- 在每一项上运行的函数(该函数有三个参数)
- 函数第一个参数:数组项的值
- 函数第二个参数:数组项的索引
- 函数第三个参数:数组对象本身
- 运行该函数的作用域对象——影响this的值(可选)
二、区别
filter()、forEach()、map()、some()、every()都是对数组的每一项调用函数进行处理。
- 区别:
– some()、every()的返回值 :true / false
– filter()、map()的返回值 :一个新数组
– forEach()无返回值。
使用filter()、forEach()、map()、some()、every()都不改变原数组。
下面进入正题,用例子区分一下filter()、forEach()、map()间的区别:
- filter()
var arr = [1,2,3,4];
var my = arr.filter(function(item,index,arr){
return item*2 > 2;
});
console.log(my); //[2, 3, 4] //说明filter返回 true的项组成的数组
console.log(arr); //[1, 2, 3, 4]
var arr = [1,2,3,4];
var my = arr.filter(function(item,index,arr){
return item*2;
});
console.log(my); //[1, 2, 3, 4] //说因为每一项都为true
console.log(arr); //[1, 2, 3, 4]
- forEach()
var arr = [1,2,3,4];
var my = arr.forEach(function(item,index,arr){
return item*2;
});
console.log(my);