面试题答案
一键面试以下是JavaScript代码实现:
const array = [1, 2, 3, 4, 5, 6];
const sum = array.filter(num => num % 2 === 0)
.map(num => num * 2)
.reduce((acc, num) => acc + num, 0);
console.log(sum);
高阶函数原理:
- filter:接受一个回调函数作为参数,对数组中的每一个元素执行该回调函数。回调函数返回一个布尔值,若为
true
,则该元素被保留在新数组中,false
则被过滤掉。它遍历数组元素,根据回调函数的返回值来决定是否保留该元素。 - map:同样接受一个回调函数,对数组中的每个元素应用这个回调函数,生成一个新数组,新数组的元素是原数组元素经过回调函数处理后的结果。它会遍历数组,并将每个元素作为参数传递给回调函数,用回调函数的返回值组成新数组。
- reduce:接受一个累加器函数和一个初始值作为参数。累加器函数接受两个参数,一个是累加器(
acc
),另一个是当前元素(num
)。它从左到右遍历数组,将累加器和当前元素作为参数传递给累加器函数,返回的结果作为新的累加器继续下一次遍历,最终返回累加器的最终值。
链式处理相较于传统循环方式的优势:
- 代码简洁:链式调用将多个操作组合在一起,代码更紧凑,可读性更高,减少了循环变量、边界条件等复杂逻辑。
- 函数式风格:遵循函数式编程理念,强调不可变数据和纯函数,减少了副作用,使代码更易于理解和维护。
- 抽象程度高:使用高阶函数隐藏了底层的循环细节,将关注点放在数据的处理逻辑上,提高了代码的抽象层次。
- 易于并行处理:函数式风格的代码更容易进行并行计算,因为它没有共享状态和副作用,有利于利用现代多核CPU的优势。