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 相关文章推荐
javascript编程起步(第五课)
Feb 27 Javascript
学习YUI.Ext第七日-View&amp;JSONView Part Two-一个画室网站的案例
Mar 10 Javascript
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
Mar 01 Javascript
JQuery入门——事件切换之hover()方法应用介绍
Feb 05 Javascript
使用闭包对setTimeout进行简单封装避免出错
Jul 10 Javascript
jQuery插件之Tocify动态节点目录菜单生成器附源码下载
Jan 08 Javascript
js传值后台中文出现乱码的解决方法
Jun 30 Javascript
关于Vue.js一些问题和思考学习笔记(2)
Dec 02 Javascript
基于JS脚本语言的基础语法详解
Jul 22 Javascript
JScript实现地址选择功能
Aug 15 Javascript
jQuery实现的简单图片轮播效果完整示例
Feb 08 jQuery
Vue中&quot;This dependency was not found&quot;问题的解决方法
Jun 19 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程序级守护进程的实现与优化的使用概述
2013/05/02 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
PHP页面输出搜索后跳转下一页的处理方法
2016/09/30 PHP
浅谈PHP中try{}catch{}的使用方法
2016/12/09 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
2018/09/03 PHP
浅析PHP7的多进程及实例源码
2019/04/14 PHP
js 实现无缝滚动 兼容IE和FF
2009/07/15 Javascript
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
使用jQuery实现dropdownlist的联动效果(sharepoint 2007)
2011/03/30 Javascript
jquery动画1.加载指示器
2012/08/24 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
2013/12/04 Javascript
node.js中的fs.lchmod方法使用说明
2014/12/16 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
三种Node.js写文件的方式
2016/03/08 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
JavaScript实现的搜索及高亮显示功能示例
2017/08/14 Javascript
Node实战之不同环境下配置文件使用教程
2018/01/02 Javascript
Angular6笔记之封装http的示例代码
2018/07/27 Javascript
vue-swiper的使用教程
2018/08/30 Javascript
Vue.js下拉菜单组件使用方法详解
2019/10/19 Javascript
vue实现设置载入动画和初始化页面动画效果
2019/10/28 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
vue+elementUI实现简单日历功能
2020/09/24 Javascript
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
[01:51]开启你的城市传奇 完美世界城市挑战赛开始报名
2018/10/09 DOTA
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
详解python3中的真值测试
2018/08/13 Python
Python3 读、写Excel文件的操作方法
2018/10/20 Python
python 执行文件时额外参数获取的实例
2018/12/18 Python
如何使用selenium和requests组合实现登录页面
2020/02/03 Python
python中tab键是什么意思
2020/06/18 Python
四年级科学教学反思
2014/02/10 职场文书
化学系大学生自荐信范文
2014/03/01 职场文书
会议欢迎标语
2014/06/30 职场文书
Python道路车道线检测的实现
2021/06/27 Python
MySQL解决Navicat设置默认字符串时的报错问题
2022/06/16 MySQL