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打造PHP的AJAX表单提交实例
Nov 03 Javascript
简体中文转换繁体中文(实现代码)
Dec 25 Javascript
dreamweaver 8实现Jquery自动提示
Dec 04 Javascript
jquery处理页面弹出层查询数据等待操作实例
Mar 25 Javascript
浅谈JavaScript 中有关时间对象的方法
Aug 15 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
May 17 Javascript
浅谈FastClick 填坑及源码解析
Mar 02 Javascript
Vue项目数据动态过滤实践及实现思路
Sep 11 Javascript
微信小程序使用setData修改数组中单个对象的方法分析
Dec 30 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
May 06 Javascript
探索浏览器页面关闭window.close()的使用详解
Aug 21 Javascript
javaScript Array api梳理
Mar 31 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
牡丹941资料
2021/03/01 无线电
php中iconv函数使用方法
2008/05/24 PHP
PHP实现冒泡排序的简单实例
2016/05/26 PHP
CSS+Jquery实现页面圆角框方法大全
2009/12/24 Javascript
js中eval详解
2012/03/30 Javascript
a标签的href和onclick 的事件的区别介绍
2013/07/26 Javascript
JSON 数字排序多字段排序介绍
2013/09/18 Javascript
关于删除时的提示处理(确定删除吗)
2013/11/03 Javascript
jquery通过a标签删除table中的一行的代码
2013/12/02 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
js实现a标签超链接提交form表单的方法
2015/06/24 Javascript
javascript同步服务器时间和同步倒计时小技巧
2015/09/24 Javascript
基于JavaScript实现树形下拉框
2016/08/10 Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
2017/02/22 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
2017/03/06 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
详解Webpack DLL用法以及功能
2017/07/11 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(下)
2018/04/18 Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
2019/05/22 Javascript
微信小程序中如何计算距离某个节日还有多少天
2019/07/15 Javascript
[43:35]TI4 循环赛第二日Liquid vs Fnatic
2014/07/11 DOTA
python getopt 参数处理小示例
2009/06/09 Python
Python原始字符串(raw strings)用法实例
2014/10/13 Python
python使用Tesseract库识别验证
2018/03/21 Python
Django渲染Markdown文章目录的方法示例
2019/01/02 Python
python如何快速生成时间戳
2020/07/21 Python
Python利用pip安装tar.gz格式的离线资源包
2020/09/14 Python
css3实现超炫风车特效
2014/11/12 HTML / CSS
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
Windows和Linux动态库应用异同
2016/07/28 面试题
电子专业求职信
2014/06/19 职场文书
优秀大学生自荐信
2015/03/26 职场文书
观后感的写法
2015/06/19 职场文书
超级实用!五步法则,教你写好年终工作总结
2019/12/05 职场文书
单机多实例部署 MySQL8.0.20
2022/05/15 MySQL