apply的理解和数组降维

func.apply(thisObj, [argArray] );

apply方法用来改变函数执行时的this指向,后面的参数是一个类数组对象,可以是数组,arguments,甚至一个有length属性的对象 { length: 3 }

apply有一个重要的作用,就是可以将  数组参数  转换为  参数列表,也就是可以 对一个数组应用原本只支持参数列表的函数。

例如:

Math.max(param1, param2....)

Array.prototype.push(param1, param2...)

Array.prototype.concat(param1, param2...)

这些只支持参数列表的函数,不能直接传入数组,但是通过apply方法,就可以将一个数组传进去,得到该数组作为参数的结果。

复制代码
//apply传入null,则转换为全局对象,window或global
Math.max.apply(null, arr)  <=>   global.max(arr[0], arr[1], arr[2] .....)  

//这里的null只是占位,传入任何值都行,max和min函数中this不起作用,传个123,结果也一样
Math.min.apply(null, arr)  <=>   global.min(arr[0], arr[1], arr[2] ......) 

//注意concat后面的arr2不是以整体的形式去连接,而是以打碎的形式去连接
Array.prototype.concat(arr1, arr2) <=>  arr1.concat(arr2[0], arr2[1], arr2[3] ......) 

Array.prototype.push(arr1, arr2)   <=>  arr1.push(arr2[0], arr2[1], arr2[3] ......)
复制代码

总之,apply就是将后面的数组参数打碎传入函数调用。 

下面是一个经典的利用apply对数组降维的例子:

Array.prototype.concat.apply([], arr2d)

一个空数组,apply调用concat,将后面的二维数组打碎,concat本身又将一维数组打碎,连接成一个一维数组。

过程如下:

Array.prototype.concat.apply([], arr2d) <=>  [].concat(arr2d[0],arr2d[1],arr2d[2]...)
//arr2d[0],arr2d[1],arr2d[2]...本身也是数组,会被concat再次打碎,合并进前面的空数组,这样
//经过两次打碎,一个二维数组就降维成一个一维数组                                             
posted @   全玉  阅读(737)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2016-10-11 Unlink of file '.git/objects/pack/pack-***.pack' failed. Should I try again? (y/n) (转)
2016-10-11 不定宽高元素的水平垂直居中
点击右上角即可分享
微信分享提示