作者:杀你哥_52544 | 来源:互联网 | 2024-12-24 10:10
本文详细介绍了JavaScript中数组的两个重要高阶函数:map()和reduce()。map()用于将数组中的每个元素通过指定的函数进行处理并返回一个新的数组,而reduce()则用于对数组中的元素进行累积计算,最终返回一个单一值。
map()
map()是Javascript中Array对象的一个方法,它接收一个函数作为参数,并将该函数应用于数组的每一个元素,生成一个新的数组。需要注意的是,这里的map()是一个函数,不是Map类型。
// 定义一个简单的幂函数
function pow(x) {
return x * x;
}
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.map(pow); // 返回 [1, 4, 9, 16, 25, 36, 49, 64, 81]
// 将数组中的所有数字转换为字符串
arr.map(String); // 返回 ['1', '2', '3', '4', '5', '6', '7', '8', '9']
reduce()
reduce()同样是Array对象的一个方法,它接收一个函数作为参数,该函数必须接收两个参数:累加器(accumulator)和当前值(current value)。reduce()会将结果与序列中的下一个元素进行累积计算,最终返回一个单一值。
var arr = [1, 3, 5, 7, 9];
arr.reduce(function (x, y) {
return x + y;
}); // 返回 25
注意事项:
var arr2 = ["1", "2", "3"];
var newArr2 = arr2.map(parseInt);
console.log(newArr2); // 输出 [1, NaN, NaN]
// 原因如下:
/* parseInt(string, radix) 函数接受两个参数:要解析的字符串和基数。当使用 map() 时,回调函数可以接收三个参数:当前值、索引和数组本身。因此,parseInt 实际上被调用为:
parseInt('1', 0); // 0 按十进制转换为 1
parseInt('2', 1); // 不存在一进制,返回 NaN
parseInt('3', 2); // 二进制不允许出现 3,返回 NaN
为了避免这个问题,可以使用 Number 函数,因为它只接收一个参数:
newArr2 = arr2.map(Number); // 正确输出 [1, 2, 3]
*/