高阶函数简介
高阶函数 的英文名叫 Higher-Order Function ,是 函数式编程 中的一种。他的表现形式往往是通过把函数作为参数传入另一个函数,或者将函数作为另一个函数的返回值返回。在实际开发业务中, 高阶函数往往可以抽象我们的代码 ,将我们的命令式编程转换为复用性更高级的函数式编程,从而 提升我们的代码质量 。
下面拿3个面试中常问的高阶函数举例子,希望看完以后能够提升大家对JS的理解,提高我们的代码质量。 chat is cheap,show you my code~
Array.map()
功能介绍
map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。 map() 方法按照原始数组元素顺序依次处理元素。
tips
注意: map() 不会对空数组进行检测。 注意: map() 不会改变原始数组。
实用意义及代码举例
//如果我们需要将一个数组中,每一项元素全都*2, //最基础的作法,是刚学JS时的循环遍历,再每一项中执行*2的操作,例如: let arr1 = [0,1,2,3,4,5,6]; let arr2 = []; for (let i = 0;i<arr1.length;i++){ arr2.push(arr1[i]*2) } console.log(arr2) //[0, 2, 4, 6, 8, 10, 12] //这样确实可以达到效果,但是这属于命令式编程; //换做Map高阶函数的方法实现起来,只需要1行,复用性也会更强。 let arr1 = [0,1,2,3,4,5,6]; let arr2 = arr1.map((item)=> item*2) console.log(arr2) //[0, 2, 4, 6, 8, 10, 12]
总结:
针对数组中每一项都要做的操作,可以实用map方法
Array.reduce()
功能介绍
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
reduce() 可以作为一个高阶函数,用于函数的 compose。
tips:
注意: reduce() 对于空数组是不会执行回调函数的。
实用意义及代码举例
//如果有一个需求,需要我们将数组中每一项求和 //实用reduce,可以优雅简洁的实现: let arr1 = [0,1,2,3,4,5,6]; let arr2 = arr1.reduce((prev,cur)=>{ //prev代表之前所有项的最终结果,cur代表当前项的值 return prev+cur },0) //这里的0是初始项传入的值,这里写为0 console.log(arr2) //21 求和完毕 //reduce也可以用于数组去重 let arr1 = [0,1,2,3,4,5,6,5,6,7,6]; let arr2 = arr1.reduce((prev,cur)=>{ //当之前所有项不包含当前项元素时,push,否则直接返回之前所有去重项。 prev.indexOf(cur) === -1 && prev.push(cur); return prev },[]) //传入空数组作为初始值 console.log(arr2) //[0, 1, 2, 3, 4, 5, 6, 7]
总结:
针对数组中所有的项累计计算的操作,最终输入一个值,可以使用reduce方法
Array.filter()
功能介绍
filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
tips
注意: filter() 不会对空数组进行检测。
注意: filter() 不会改变原始数组。
实用代码举例
//例如,需求为获取数组中所有大于等于4的元素,将他们组成一个数组 let arr1 = [0,1,2,3,4,5,6,5,6,7,6]; let arr2 = arr1.filter((item)=>{ return item >= 4 },[]) console.log(arr2) //[4, 5, 6, 5, 6, 7, 6]
总结:
对于数组中每一项的筛选功能,可以使用filter方法
Array.flat()
功能介绍
flat() 方法可以将嵌套数组(多为数组)降维,变成低维数组或者一维数组。(数组摊平展开)
tips
注意: 存在一定兼容性问题,例如IE不兼容
实用代码举例
let arr1 = [0,1,2,3,4,5,[1,2,3],[1,2,[1,2,3,4]],6,7,6]; let arr2 = arr1.flat(1) //flat中传入需要降维的层数,默认是1,如果有个三维数组他会被降级为二位数组, let arr3 = arr1.flat(Infinity) //[0, 1, 2, 3, 4, 5, 1, 2, 3, 1, 2, 1, 2, 3, 4, 6, 7, 6] //如果不管是几维数组,需要得到1维数组的话,可以直接使用Infinity console.log(arr2) //[0, 1, 2, 3, 4, 5, 1, 2, 3, 1, 2, [1,2,3,4], 6, 7, 6]
以上就是详解JavaScript 高阶函数的详细内容,更多关于JavaScript 高阶函数的资料请关注其它相关文章!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 齐豫.2003-THE.UNHEARD.OF.CHYI.3CD【苏活音乐】【WAV+CUE】
- 黄乙玲1986-讲什么山盟海誓[日本东芝版][WAV+CUE]
- 曾庆瑜1991-柔情陷阱[台湾派森东芝版][WAV+CUE]
- 陈建江《享受男声》DTS-ES6.1【WAV】
- 群星《闪光的夏天 第5期》[FLAC/分轨][392.38MB]
- 徐小凤《三洋母带》1:1母盘直刻[WAV+CUE][981M]
- 王菲1995《菲靡靡之音》[香港首版][WAV+CUE][1G]
- 《双城之战》主题小游戏现已上线 扮演金克丝探索秘密基地
- 《霍格沃茨之遗》PS5Pro画面对比:光追性能显著提升
- 《怪猎荒野》PS5Pro主机版对比:B测性能都不稳定
- 黄宝欣.1992-黄宝欣金装精选2CD【HOMERUN】【WAV+CUE】
- 群星.1996-宝丽金流行爆弹精丫宝丽金】【WAV+CUE】
- 杜德伟.2005-独领风骚新歌精选辑3CD【滚石】【WAV+CUE】
- 安与骑兵《心无疆界》[低速原抓WAV+CUE]
- 柏菲唱片-群星〈胭花四乐〉2CD[原抓WAV+CUE]