目录
1、forEach()方法从头到尾遍历数组,为每个元素调用指定的函数。
2、map()方法将调用的数组的每个元素传递给指定的函数,并返回一个数组,它包含该函数的返回值。
3、filter()方法返回的数组元素是调用的数组的一个子集。传递的函数用来逻辑判定:该函数返回true(或能转化为true的值)或false(同理)。
4、every()和some()方法是数组的逻辑判定:它们对数组应用指定的函数进行判定,返回true或false。
5、reduce()和reduceRight()方法使用指定的函数将数组元素进行组合,生成单个值。在函数式编程中称为“注入”和“折叠”。
6、indexOf()和lastIndexOf()搜索整个数组中具有给定值的元素,返回找到的第一个元素的索引,如果未找到就返回-1。
本博文内容摘抄自《JavaScript权威指南(第6版)》
1、forEach()方法从头到尾遍历数组,为每个元素调用指定的函数。
传递(或者叫做调用)的函数作为forEach()的第一个参数,然后forEach()使用三个参数调用该函数:数组元素、元素的索引和数组本身。如果只关心数组元素的值,可以只传递第一个参数(即数组元素)。
var data = [1,2,3,4,5]; //要求和的数组
//计算数组元素的和
var sum = 0;
data.forEach(function(value) { sum += value; });
sum //输出:15
//为每个数组元素自加1
data.forEach(function(value, i, list) {list[i] = value + 1; });
data //输出:[2,3,4,5,6]
注意:forEach()无法在所有元素都传递给调用函数之前终止遍历,也就是说:遍历不能中途打断。若要提前终止,必须把forEach()方法放在一个try块中,并能抛出一个异常(foreach.break异常)才可以。
function foreach(a, f, t) {
try { a.forEach(f, t);}
catch(e) {
if(e === foreach.break) return;
else throw e;
}}
foreach.break = new Error("StopIteration");
2、map()方法将调用的数组的每个元素传递给指定的函数,并返回一个数组,它包含该函数的返回值。
a = [1,2,3];
b = a.map(function(x) {return x*x; }); //b是[1,4,9]
注意:map()返回的是一个新数组,不修复调用的数组。相当于先复制,再数据处理。
3、filter()方法返回的数组元素是调用的数组的一个子集。传递的函数用来逻辑判定:该函数返回true(或能转化为true的值)或false(同理)。
a = [5,4,3,2,1]
small = a.filter(function(x) { return x < 3 }); //[2,1]
other = a.filter(function(x) { return i%2==0 }); //[5,3,1]
//压缩稀疏数组的空缺,返回的数组始终都是稠密的:
var dense = sparse.filter(function() { return true; });
//甚至,压缩空缺并删除undefined和null元素:
a = a.filter(function(x) { return x !== undefined && x !== null; });
4、every()和some()方法是数组的逻辑判定:它们对数组应用指定的函数进行判定,返回true或false。
//every()方法意味“针对所有”:当且仅当针对数组中的所有元素调用判定函数都返回true,它才返回true
a = [1,2,3,4,5];
a.every(function(x) { return x < 10; }); //true:所有的值<10
a.every(function(x) { return x%2 === 0; }); //false:不是所有的值都是偶数
/*some()方法意味“存在”:当数组中至少有一个元素调用判定函数返回true,它就返回true;当且仅当所有元素调用判定函数都返回false,它才返回false */
a = [1,2,3,4,5];
a.some(function(x) { return x%2 === 0; }); //true:a含有偶数值
a.some(isNaN); //false:a不包含非数值元素
5、reduce()和reduceRight()方法使用指定的函数将数组元素进行组合,生成单个值。在函数式编程中称为“注入”和“折叠”。
var a = [1,2,3,4,5];
/*
reduce()需要两个参数。第一个是执行化简操作的函数(用某种方法把两个值组合或化简为一个值,并返回该值)。第二个(可选)参数是一个传递给函数的初始值。
*/
var sum = a.reduce(function(x,y) { return x+y; }, 0); //数组求和
var product= a.reduce(function(x,y) { return x*y; }, 1); //数组求积
var max= a.reduce(function(x,y) { return (x > y) ? x : y; }); //求最大值
/*
reduceRight()的工作原理和reduce()一样,不同的是它按照数组索引从高到低(从右到左)处理数组,而不是从低到高。是否使用reduceRight()取决于化简操作的优先索引顺序。
*/
6、indexOf()和lastIndexOf()搜索整个数组中具有给定值的元素,返回找到的第一个元素的索引,如果未找到就返回-1。
indexOf()从头至尾搜索,而astIndexOf()则反向搜索。
a = [0,1,2,1,0];
a.indexOf(1); //输出1:a[1]是1
a.lastIndexOf(1); //输出3:a[3]是1
a.indexOf(3); //输出-1:没有值为3的元素