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 相关文章推荐
基于jQuery的星级评分插件
Aug 12 Javascript
关于js中for in的缺陷浅析
Dec 02 Javascript
js判断手机端(Android手机还是iPhone手机)
Jul 22 Javascript
JavaScript 不支持 indexof 该如何解决
Mar 30 Javascript
微信小程序 获取相册照片实例详解
Nov 16 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
Dec 02 Javascript
简单几步实现返回顶部效果
Dec 05 Javascript
js实现无缝滚动图
Feb 22 Javascript
Vue.js对象转换实例
Jun 07 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
Nov 23 Javascript
在Webpack中用url-loader处理图片和字体的问题
Apr 28 Javascript
jquery插件实现代码雨特效
Apr 24 jQuery
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实现文件上传基本验证
2020/03/04 PHP
Mootools 1.2教程 函数
2009/09/15 Javascript
我用的一些Node.js开发工具、开发包、框架等总结
2014/09/25 Javascript
jQuery实现可展开合拢的手风琴面板菜单
2015/09/15 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
2015/10/29 Javascript
jQuery实现Email邮箱地址自动补全功能代码
2015/11/03 Javascript
JS验证逗号隔开可以是中文字母数字
2016/04/22 Javascript
JavaScript中0和&quot;&quot;比较引发的问题
2016/05/26 Javascript
Web安全测试之XSS实例讲解
2016/08/15 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
微信小程序 Template详解及简单实例
2017/01/05 Javascript
Angular.js 4.x中表单Template-Driven Forms详解
2017/04/25 Javascript
原生JS实现多个小球碰撞反弹效果示例
2018/01/31 Javascript
微信小程序如何像vue一样在动态绑定类名
2018/04/17 Javascript
jQuery实现点击图标div循环放大缩小功能
2018/09/30 jQuery
Vue.js 中的 v-model 指令及绑定表单元素的方法
2018/12/03 Javascript
vue实现后台管理权限系统及顶栏三级菜单显示功能
2019/06/19 Javascript
python中的__init__ 、__new__、__call__小结
2014/04/25 Python
python处理文本文件实现生成指定格式文件的方法
2014/07/31 Python
python实现简单温度转换的方法
2015/03/13 Python
用Python实现KNN分类算法
2017/12/22 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
Python配置虚拟环境图文步骤
2019/05/20 Python
python用TensorFlow做图像识别的实现
2020/04/21 Python
python处理写入数据代码讲解
2020/10/22 Python
关于python scrapy中添加cookie踩坑记录
2020/11/17 Python
Python的信号库Blinker用法详解
2020/12/31 Python
纯css3使用vw和vh实现自适应的方法
2018/02/09 HTML / CSS
H5仿微信界面教程(一)
2017/07/05 HTML / CSS
HTML5边玩边学(2)基础绘图实现方法
2010/09/21 HTML / CSS
Wolford法国官网:奥地利奢侈内衣品牌
2020/08/11 全球购物
类的返射机制中的包及核心类
2016/09/12 面试题
档案接收函范文
2014/01/10 职场文书
英语专业学生个人求职信
2014/01/28 职场文书
PostgreSQL解析URL的方法
2021/08/02 PostgreSQL
docker 制作mysql镜像并自动安装
2022/05/20 Servers