记录在学习js中的收获及心得,JS中关于数组运算的一些高阶函数,同时将会对比高阶函数对应的普通算法。
filter,map,reduce
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
可按照规则转换数组中的元素,并形成新的数组。
//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的回调函数有个初始值,需根据情况设置。
//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);