迭代方法
ECMAScript5为数组定义了5个迭代方法。传入这些方法中的函数会接收三个参数:数组项的值、该项在数组中的位置和数组对象的本身。根据使用方法的不同,这个函数执行后的返回值可能会、也可能不会影响访问的返回值。以下是这5个迭代方法的作用
- every():对数组中的每一项运行给定的函数,如果该函数对每一项都返回true,则返回true(返回值为布尔类型)。
- filter():对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组。
- forEach():对数组中的每一项运行给定的函数。这个方法没有返回值。
- map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
- some():对数组中的每一项运行给定函数,如果该函数对任意一项返回true,则返回true。
var arr = [1,2,3,4,5,6,7,8,9]; /* arr.every(function(item, index, array){}) 在every方法传入的函数中的参数 item是第一个元素的值 index是第一个元素的下标 array是传入的数组 item和index不会把传入的数组遍历输出 arr.some(function(item, index, array) {}) 在some方法的回调函数中的参数 item和index 会遍历输出数组中的每一个元素和其对应的下标 */ var everyResult = arr.every(function(item, index, array){ console.log(item) // 1 console.log(index) // 0 console.log(array) // [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ] return item > 6 }); console.log(everyResult) // false var someResult = arr.some(function(item, index, array) { console.log(item) // 1 2 3 4 5 6 7 8 9 console.log(index) // 0 1 2 3 4 5 6 7 8 console.log(array) // [1,2,3,4,5,6,7,8,9] return item > 6 }); console.log(someResult) // true
var arr = [1,2,3,4,5,6,7,8,9]; console.log("----------filter------------") var filterResult = arr.filter(function(item, index, array){ console.log(item) console.log(index) console.log(array) return item > 5 }); console.log(filterResult) console.log("----------map------------") var mapResult = arr.map(function(item, index, array){ console.log(item) console.log(index) console.log(array) return item * 4 }); console.log(mapResult)
缩小方法
ECMAScript5新增了两个缩小方法reduce()和reduceRight()。这两个方法都会迭代数组的所有元素,并构建一个新的值返回。reduce是从数组的第一项开始迭代,直到结束。reduceRight是从数组的最后一项迭代,直到第一项为止。
这两个方法都接收一个回调函数,回调函数中有四个参数。第一个参数是上一个值,第二个参数是当前值,第三个参数是当前值的索引,第四个参数是传入的数组。
var arr = [1,2,3,4,5,6,7,8,9]; var reduceResult = arr.reduce(function(prev, cur, index, array){ /* 第一次执行回调函数时prev的值1 cur的值是2 第二次prev为3(1+2) cur为3 */ return prev + cur }); console.log(reduceResult) // 45 var rightResult = arr.reduceRight(function(prev, cur, index, array){ /* 第一次执行回调函数时prev的值9 cur的值是8 第二次prev为17(9+8) cur为7 */ return prev + cur }); console.log(rightResult) // 45