JS中关于数组运算的一些高阶函数,同时将会对比高阶函数对应的普通算法。

需求:找出指定数组中所有的偶数,在扩大10倍后,最终求出数组中所有整数的和。


filter:可按照规则过滤原数组中的元素,并形成新的数组,filter的回调函数必须返回bool值,只有当返回值为真时,才会将计算的值插入新数组,反之将被过滤掉。

下面的代码先找出数组中所有的偶数:

let simarr = [1, 3, 5, 2, 4, 7, 9, 6]

//1.取数组中所有的偶数,形成一个新数组
//for算法
let sim_for_arr = []
for (let i = 0; i < simarr.length; i++) {
if (simarr[i] % 2 == 0) {
sim_for_arr.push(simarr[i])
}
}
console.log('sim_for_arr:', sim_for_arr);

//filter函数
//按规则过滤数组,并形成新的数据
let sim_filter_arr = simarr.filter(function (n) {
return n % 2 == 0
})
console.log('sim_filter_arr:', sim_filter_arr);
map:可按照规则转换数组中的元素,并形成新的数组。

下面的代码将新数组中的偶数扩大10倍:

//2.将新生成的数组中的每个元素扩大10倍
//for算法
let sim_for2_arr = []
for (let i = 0; i < sim_for_arr.length; i++) {
sim_for2_arr.push(sim_for_arr[i] * 10)
}
console.log('sim_for2_arr:', sim_for2_arr);

//map函数
//按规则调整数组中的元素
let sim_map_arr = sim_filter_arr.map(function (n) {
return n * 10
})
console.log('sim_map_arr', sim_map_arr);
reduce:可汇总数组中的元素,需注意reduce的回调函数有个初始值,需根据情况设置。

下面代码求出10倍后所有偶数的和:

//3.计算数组中所有元素的和
//for算法
let Total_for = 0
for (let i = 0; i < sim_for2_arr.length; i++) {
Total_for += sim_for2_arr[i]
}
console.log('Total_for', Total_for);

//reduce函数
//按规则汇总数组中的元素
let Total = sim_map_arr.reduce(function (preval, n) {
return preval + n
}, 0)
console.log('Total:', Total);
最终高阶编码方式:一行代码完成3个高阶函数的使用
let totalfinal = 0
totalfinal = simarr.filter(n => n % 2 == 0).map(n => n * 10).reduce((preval, n) => preval + n)
console.log('totalfinal', totalfinal);