Array Type(下)
迭代方法
ES 5为数组定义了 5 个迭代方法;每个方法接受 2 个参数:
- 要在每一项上运行的函数;
- (可选)运行该函数的作用域对象 -- 影响
this的值。
作用函数接收 3 个参数:
- 数组项的值;
- 该项在数组中的位置;
- 数组对象本身。
五个迭代操作
every():对数组的每一项运行给定的函数,如果该函数对每一项运行都返回true或转换后为true的值,则every()操作 返回true,否则返回false,对原函数无影响;
some():对数组中的每一项运行给定 ,如果该函数对任一项返回true或转换后为true的值,则返回true;
filter():对数组的每一项运行给定函数,返回该函数会返回true的项组成的 数组,;
forEach():对数组中的每一项运行给定函数。无返回值,但会对原函数的每一项进行相应的改变相当于用for循环对数组元素遍历;
map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组;var numbers = [1, 2, 3, 4, 3, 2, 1]; function operation(item, index, arr) { return (item - arr[2]); // item - 3 } // every var everyResult = numbers.every(operation); alert(everyResult); // false // some var someResult = numbers.some(operation); alert(someResult); // true // filter var filterResult = numbers.filter(operation); filterResult; // 1,2,4,2,1 numbers; // filter 不对原函数造成影响 // forEach var forEachResult = numbers.forEach(function pop(item, index, arr) { alert('index' + index + ': ' +item); // idnex0:... }); // map var mapResult = numbers.map(function (item, index, arr) { return item*index+arr.length; }); numbers; // map 操作对原数组不影响 mapResult; // [7, 9, 13, 19, 19, 17, 13]
缩小方法
ES 5新增两个缩小数组的方法:reduce()reduceRight();分别从左(右)迭代 遍历数组的所有项,构建一个最终的返回值;
参数
- 对每一项运行的函数;
- (可选)做为缩小基础的初始值。
参数函数的 4 个参数
- 前一个值
- 当前值
- 项的索引
数组对象本身
var numbers = [1, 2, 3, 4, 5]; var sum0 = numbers.reduce(function (pre, cur, index, arr) { return pre + cur; }) alert(sum0); // 15 var sum1 = numbers.reduce(function (pre, cur, index, arr){ if (cur > 3) { return pre + cur; } return 0; }) alert(sum1); // 9
- 说明:第一次执行函数时,数组的第一项是
pre,第二项是cur,执行返回值 作为新的pre继续迭代。