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 相关文章推荐
ajax无刷新动态调用股票信息(改良版)
Nov 01 Javascript
JAVASCRIPT IE 与 FF中兼容问题小结
Feb 18 Javascript
JavaScript 判断指定字符串是否为有效数字
May 11 Javascript
js实现鼠标感应图片展示的方法
Feb 27 Javascript
javascript操作select元素实例分析
Mar 27 Javascript
微信小程序 实战小程序实例
Oct 08 Javascript
原生js实现对Ajax的封装(仿jquery)
Jan 22 Javascript
JS奇技之利用scroll来监听resize详解
Jun 15 Javascript
[js高手之路]寄生组合式继承的优势详解
Aug 28 Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
Dec 19 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
Sep 12 Javascript
微信小程序云开发如何实现数据库自动备份实现
Aug 16 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 正则学习实例
2008/07/30 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
2014/08/28 PHP
php实现的简单美国商品税计算函数
2015/07/13 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
用Javscript实现表单复选框的全选功能
2007/05/25 Javascript
window.parent与window.openner区别介绍
2012/04/12 Javascript
js replace正则表达式应用案例讲解
2013/01/17 Javascript
js简易namespace管理器 实例代码
2013/06/21 Javascript
JS常见问题整理(持续更新)
2013/08/06 Javascript
JS关闭窗口或JS关闭页面的几种代码分享
2013/10/25 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
jquery实现TAB选项卡鼠标经过带延迟效果的方法
2015/07/27 Javascript
再JavaScript的jQuery库中编写动画效果的指南
2015/08/13 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
倾力总结40条常见的移动端Web页面问题解决方案
2016/05/24 Javascript
简单谈谈ES6的六个小特性
2016/11/18 Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
2018/10/25 Javascript
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
js如何实现元素曝光上报
2019/08/07 Javascript
Vue循环遍历选项赋值到对应控件的实现方法
2020/06/22 Javascript
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
python入门之语句(if语句、while语句、for语句)
2015/01/19 Python
在Python中使用itertools模块中的组合函数的教程
2015/04/13 Python
Python2中的raw_input() 与 input()
2015/06/12 Python
Python 描述符(Descriptor)入门
2016/11/20 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
2017/12/19 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
2018/10/14 Python
python 导入数据及作图的实现
2019/12/03 Python
Python PyInstaller安装和使用教程详解
2020/01/08 Python
Python 列表的清空方式
2020/01/13 Python
浅谈pycharm导入pandas包遇到的问题及解决
2020/06/01 Python
python实现马丁策略的实例详解
2021/01/15 Python
2014公司党员自我评价范文
2014/09/11 职场文书
公司收款委托书范本
2014/09/20 职场文书
2015年共青团工作总结
2015/05/15 职场文书
活动新闻稿范文
2015/07/17 职场文书