JS Array.from()将伪数组转换成数组的方法示例


Posted in Javascript onMarch 23, 2020

Array.from 方法用于将两类对象转换为真正的数组:

1、类似数组的对象,可以理解为“伪数组”

2、可遍历对象(比如字符串)

什么是伪数组?

伪数组都有一个基本的特点:必须有 length 属性。

let arrayLike = {
 "0": "a",
 "1": "b",
 "2": "c",
 "length": 3
}

像上面的 arrayLike 对象,有 length 属性,key 也是有序序列。

所以可以遍历,也可以查询长度。但却不能调用数组的方法。比如 push、pop 等方法。

在 ES6 之前,还有一个常见的伪数组:arguments。

arguments 看上去也很像一个数组,但它没有数组的方法。

比如 arguments.push(1) ,这样做一定会报错。

ES5 的做法

在 ES6 问世之前,开发者通常需要用以下的方法把伪数组转换成数组。

方法1:遍历
// 通过 makeArray 方法,把数组转成伪数组
function makeArray(arrayLike) {
 let result = [];
 for (let i = 0, len = arrayLike.length; i < len; i++) {
  result.push(arrayLike[i]);
 }
 return result;
}

function doSomething () {
 let args = makeArray(arguments);
 console.log(args);
}
doSomething(1, 2, 3);

// 输出: [1, 2, 3]

这个方法虽然有效,但要多写很多代码。

方法2:Array.prototype.slice.call

function doSomething () {
 let args = Array.prototype.slice.call(arguments);
 console.log(args);
}
doSomething(1, 2, 3);

// 输出: [1, 2, 3]

这个方法的功能和 方法1 是一样的,虽然代码量减少了,但不能很直观的让其他开发者觉得这是在转换。

ES6的做法

直到 ES6 提供了 Array.from 方法完美解决以上问题。

function doSomething () {
 let args = Array.from(arguments);
 console.log(args);
}

doSomething('一', '二', '三');

// 输出: ['一', '二', '三']

Array.from 的主要作用就是把伪数组和可遍历对象转换成数组的。

说“主要作用”的原因是因为 Array.from 还提供了2个参数可传。这样可以延伸很多种小玩法。

Array.from 的第二个参数是一个函数,类似 map遍历 方法。用来遍历的。

Array.from 的第三个参数接受一个 this 对象,用来改变 this 指向。

第三个参数的用法(不常用)

let helper = {
 diff: 1,
 add (value) {
  return value + this.diff; // 注意这里有个 this
 }
};

function translate () {
 return Array.from(arguments, helper.add, helper);
}

let numbers = translate(1, 2, 3);

console.log(numbers); // 2, 3, 4

其他玩法

创建长度为5的数组,且初始化数组每个元素都是1

let array = Array.from({length: 5}, () => 1)
console.log(array)

// 输出: [1, 1, 1, 1, 1]

第二个参数的作用和 map遍历 差不多的,所以 map遍历 有什么玩法,这里也可以做相同的功能。就不多赘述了。

把字符串转成数组

let msg = 'hello';
let msgArr = Array.from(msg);
console.log(msgArr);
// 输出: ["h", "e", "l", "l", "o"]

最后一个问题:如果传一个真正的数组给 Array.from 会返回什么结果?

答案是:会返回一个一模一样的数组。

到此这篇关于JS Array.from()将伪数组转换成数组的方法示例的文章就介绍到这了,更多相关JS Array.from伪数组转换成数组内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木! 

Javascript 相关文章推荐
脚本安需导入(装载)的三种模式的对比
Jun 24 Javascript
js 表格隔行颜色
Dec 02 Javascript
JavaScript纯色二维码变成彩色二维码
Jul 23 Javascript
微信小程序实现滑动删除效果
May 19 Javascript
vue router学习之动态路由和嵌套路由详解
Sep 21 Javascript
js实现动态改变radio状态的方法
Feb 28 Javascript
解决vue 绑定对象内点击事件失效问题
Sep 05 Javascript
JS使用栈判断给定字符串是否是回文算法示例
Mar 04 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
Jul 10 Javascript
Vue2.4+新增属性.sync、$attrs、$listeners的具体使用
Mar 08 Javascript
javascript运行机制之执行顺序理解
Aug 03 Javascript
解决vscode进行vue格式化,会自动补分号和双引号的问题
Oct 26 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
Mar 23 #Javascript
小程序使用分包的示例代码
Mar 23 #Javascript
用JS实现选项卡
Mar 23 #Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
Mar 23 #Javascript
云服务器部署Node.js项目的方法步骤(小白系列)
Mar 23 #Javascript
vue ssr+koa2构建服务端渲染的示例代码
Mar 23 #Javascript
详解webpack-dev-middleware 源码解读
Mar 23 #Javascript
You might like
PHP 验证登陆类分享
2015/03/13 PHP
[原创]php简单防盗链验证实现方法
2016/07/09 PHP
PHP session垃圾回收机制实例分析
2019/06/28 PHP
Web层改进II-用xmlhttp 无声息提交复杂表单
2007/01/22 Javascript
清华大学出版的事半功倍系列 javascript全部源代码
2007/05/04 Javascript
JavaScript 开发规范要求(图文并茂)
2010/06/11 Javascript
使用Math.floor与Math.random取随机整数的方法详解
2013/05/07 Javascript
jQuery表格插件ParamQuery简单使用方法示例
2013/12/05 Javascript
jQuery+PHP打造滑动开关效果
2014/12/16 Javascript
超漂亮的jQuery图片轮播特效
2015/11/24 Javascript
javascript实现数字倒计时特效
2016/03/30 Javascript
深入理解JQuery中的事件与动画
2016/05/18 Javascript
JavaScript实现二叉树定义、遍历及查找的方法详解
2017/12/20 Javascript
JavaScript实现计算多边形质心的方法示例
2018/01/31 Javascript
Vue与Node.js通过socket.io通信的示例代码
2018/07/25 Javascript
JavaScript函数的特性与应用实践深入详解
2018/12/30 Javascript
如何为vuex实现带参数的 getter和state.commit
2019/01/04 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
2019/04/10 Javascript
vue 动态添加class,三个以上的条件做判断方式
2020/11/02 Javascript
[02:26]2018DOTA2亚洲邀请赛赛前采访-Newbee篇
2018/04/03 DOTA
python简单实现旋转图片的方法
2015/05/30 Python
Python实现把json格式转换成文本或sql文件
2015/07/10 Python
Python爬虫:通过关键字爬取百度图片
2017/02/17 Python
python分割列表(list)的方法示例
2017/05/07 Python
python写一个md5解密器示例
2018/02/23 Python
pandas去除重复列的实现方法
2019/01/29 Python
Python脚本修改阿里云的访问控制列表的方法
2019/03/08 Python
Python 多线程其他属性以及继承Thread类详解
2019/08/28 Python
美国成衣女装品牌:CHICO’S
2016/09/19 全球购物
创业资金计划书
2014/02/06 职场文书
团购业务员岗位职责
2014/03/15 职场文书
社区春季防火方案
2014/06/02 职场文书
2015年收银员个人工作总结
2015/04/01 职场文书
2015教师个人德育工作总结
2015/07/22 职场文书
python调用ffmpeg命令行工具便捷操作视频示例实现过程
2021/11/01 Python
python playwright之元素定位示例详解
2022/07/23 Python