博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
apply的理解和数组降维
阅读量:5066 次
发布时间:2019-06-12

本文共 1227 字,大约阅读时间需要 4 分钟。

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或globalMath.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再次打碎,合并进前面的空数组,这样//经过两次打碎,一个二维数组就降维成一个一维数组                                             

转载于:https://www.cnblogs.com/mengff/p/9770143.html

你可能感兴趣的文章
TensorFlow 从零到helloWorld
查看>>
@class、#import
查看>>
iOS 正则表达式使用的三种方式&语法
查看>>
kafka的使用
查看>>
AT2672 Coins
查看>>
团队计划会议-01
查看>>
Linux0.11内核--加载可执行二进制文件之1.copy_strings
查看>>
编写Nginx启停服务脚本
查看>>
这些老外的开源技术养活了很多国产软件
查看>>
看图软件推荐
查看>>
【IdentityServer4文档】- 欢迎来到 IdentityServer4
查看>>
安全测试的一些漏洞和测试方法
查看>>
spring框架学习笔记(八)
查看>>
vim格式化代码
查看>>
探索 ConcurrentHashMap 高并发性的实现机制
查看>>
Web服务器超时处理
查看>>
keil C 51 strlen库函数使用
查看>>
JS取得绝对路径
查看>>
排球积分程序(三)——模型类的设计
查看>>
编程原则 流水账
查看>>