博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于在类数组中使用数组方法
阅读量:6126 次
发布时间:2019-06-21

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

类数组是指具有数字索引下标并且有length属性的对象

{
'1': 'a', '2': 'b', length: 3}复制代码

由于它们并不是真正的数组并不能使用数组的方法;那么有什么方法可以让他们用上方便的数组方法呢?

借助call和apply

(function() {    Array.prototype.push.call(arguments, 4)    console.log(arguments)    // [1,2,3,4]/{ '0': 1, '1': 2, '2': 3, '3': 4 }})(1,2,3)复制代码

利用反柯里化优化该方法

我们在函数原型上添加一个方法uncurrying

Function.prototype.uncurrying = function() {    let self = this;    // 这里是拿出参数组中的第一个参数赋值给obj,剩下的参数就是arguments    return function() {        let obj = Array.prototype.shift.call(arguments)        return self.apply(obj, arguments)      }}复制代码

使用方法

// 生成一个可以随处使用的push方法let push = Array.prototype.push.uncurrying();(function() {    push(arguments, 4)    console.log(arguments)    // [1,2,3,4]/{ '0': 1, '1': 2, '2': 3, '3': 4 }})(1,2,3)复制代码

甚至我们可以直接把类数组不支持的方法直接复制到array对象上。

var arr = ['push', 'shift', 'forEach']for(let i = 0, fn; fn = arr[i++];) {    Array[fn] = Array.prototype[fn].uncurrying()}var obj = {    length: 2,    '0': 1,    '1': 2}Array.push(obj, 3);console.log(obj) //Object {0: 1, 1: 2, 2: 3, length: 3}Array.shift(obj) // 1console.log(obj) //Object {0: 2, 1: 3, length: 2}Array.forEach(obj, function(i, n){  console.log(i,n)})// 2 0// 3 1复制代码

转载于:https://juejin.im/post/5c06202ee51d451dba456a87

你可能感兴趣的文章
【转】php字符串加密解密
查看>>
22. linux 常用命令
查看>>
ASP.Net 使用GridView模板删除一行的用法
查看>>
(十六)字段表集合
查看>>
JPGraph
查看>>
实验二 Java面向对象程序设计
查看>>
------__________________________9余数定理-__________ 1163______________
查看>>
webapp返回上一页 处理
查看>>
新安装的WAMP中phpmyadmin的密码问题
查看>>
20172303 2017-2018-2 《程序设计与数据结构》第5周学习总结
查看>>
eclipse中将一个项目作为library导入另一个项目中
查看>>
Go语言学习(五)----- 数组
查看>>
Android源码学习之观察者模式应用
查看>>
Content Provider的权限
查看>>
416. Partition Equal Subset Sum
查看>>
centos7.0 64位系统安装 nginx
查看>>
数据库运维平台~自动化上线审核需求
查看>>
注解开发
查看>>
如何用 Robotframework 来编写优秀的测试用例
查看>>
Django之FBV与CBV
查看>>