ES6入门教程之Array.from()方法


Posted in Javascript onMarch 23, 2019

前言

ES6为Array增加了from函数用来将其他对象转换成数组。

当然,其他对象也是有要求,也不是所有的,可以将两种对象转换成数组。

1.部署了Iterator接口的对象,比如:Set,Map,Array。

2.类数组对象,什么叫类数组对象,就是一个对象必须有length属性,没有length,转出来的就是空数组。

Array.from()方法就是将一个类数组对象或者可遍历对象转换成一个真正的数组。

那么什么是类数组对象呢?所谓类数组对象,最基本的要求就是具有length属性的对象。

1、将类数组对象转换为真正数组:

let arrayLike = {
 0: 'tom', 
 1: '65',
 2: '男',
 3: ['jane','john','Mary'],
 'length': 4
}
let arr = Array.from(arrayLike)
console.log(arr) // ['tom','65','男',['jane','john','Mary']]

那么,如果将上面代码中 length 属性去掉呢?实践证明,答案会是一个长度为0的空数组。

这里将代码再改一下,就是具有 length 属性,但是对象的属性名不再是数字类型的,而是其他字符串型的,代码如下:

let arrayLike = {
 'name': 'tom', 
 'age': '65',
 'sex': '男',
 'friends': ['jane','john','Mary'],
 length: 4
}
let arr = Array.from(arrayLike)
console.log(arr) // [ undefined, undefined, undefined, undefined ]

会发现结果是长度为4,元素均为 undefined 的数组

由此可见,要将一个类数组对象转换为一个真正的数组,必须具备以下条件:

1、该类数组对象必须具有 length 属性,用于指定数组的长度。如果没有 length 属性,那么转换后的数组是一个空数组。

2、该类数组对象的属性名必须为数值型或字符串型的数字

该类数组对象的属性名可以加引号,也可以不加引号

2、将Set结构的数据转换为真正的数组:

let arr = [12,45,97,9797,564,134,45642]
let set = new Set(arr)
console.log(Array.from(set)) // [ 12, 45, 97, 9797, 564, 134, 45642 ]

Array.from 还可以接受第二个参数,作用类似于数组的 map 方法,用来对每个元素进行处理,将处理后的值放入返回的数组。

如下:

let arr = [12,45,97,9797,564,134,45642]
let set = new Set(arr)
console.log(Array.from(set, item => item + 1)) // [ 13, 46, 98, 9798, 565, 135, 45643 ]

快速创建一个1~20的数组

Array.from({length:20},(t,i)=>i+1)
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

模拟生成 1万条数据

// 模拟生成 1万条数据,利用了 Array.from 来快速生成数据
const originNews = Array.from(
 { length: 10000 },
 (v, k) => ({ content: `新闻${k}` })
)

3、将字符串转换为数组:

let str = 'hello world!';
console.log(Array.from(str)) // ["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d", "!"]

4、Array.from参数是一个真正的数组:

console.log(Array.from([12,45,47,56,213,4654,154]))

像这种情况,Array.from 会返回一个一模一样的新数组

把数组按指定大小进行分组,可以用于分页、数据切割、异步操作数据。

const chunk = (arr, size) =>
 Array.from({ length: Math.ceil(arr.length / size) }, (v, i) =>
 arr.slice(i * size, i * size + size)
 );

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
通过JAVASCRIPT读取ASP设定的COOKIE
Nov 24 Javascript
JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
Apr 11 Javascript
jQuery+CSS3实现3D立方体旋转效果
Nov 10 Javascript
Bootstrap每天必学之按钮(一)
Nov 24 Javascript
基于javascript实现根据身份证号码识别性别和年龄
Jan 22 Javascript
Javascript的表单验证-初识正则表达式
Mar 18 Javascript
基于React.js实现原生js拖拽效果引发的思考
Mar 30 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
May 31 Javascript
卸载安装Node.js与npm过程详解
Aug 15 Javascript
详解JS去重及字符串奇数位小写转大写
Dec 29 Javascript
如何用RxJS实现Redux Form
Dec 29 Javascript
原生JS实现逼真的图片3D旋转效果详解
Feb 16 Javascript
setTimeout与setInterval的区别浅析
Mar 23 #Javascript
如何通过setTimeout理解JS运行机制详解
Mar 23 #Javascript
vue中axios请求的封装实例代码
Mar 23 #Javascript
vueScroll实现移动端下拉刷新、上拉加载
Mar 22 #Javascript
浅谈Angular单元测试总结
Mar 22 #Javascript
JavaScript面试技巧之数组的一些不low操作
Mar 22 #Javascript
Vue-CLI 3.X 部署项目至生产服务器的方法
Mar 22 #Javascript
You might like
openflashchart 2.0 简单案例php版
2012/05/21 PHP
Yii的CDbCriteria查询条件用法实例
2014/12/04 PHP
php恢复数组的key为数字序列的方法
2015/04/28 PHP
Symfony的安装和配置方法
2016/03/17 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
2017/08/07 PHP
php递归函数怎么用才有效
2018/02/24 PHP
JS 事件绑定函数代码
2010/04/28 Javascript
JS高级拖动技术 setCapture,releaseCapture
2011/07/31 Javascript
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
2011/10/29 Javascript
如何实现textarea里的不同文本显示不同颜色
2014/01/20 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
bootstrap-treeview自定义双击事件实现方法
2016/01/09 Javascript
深入浅析JavaScript的API设计原则
2016/06/14 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
import与export在node.js中的使用详解
2017/09/28 Javascript
JavaScript中为事件指定处理程序的五种方式分析
2018/07/27 Javascript
微信小程序的开发范式BeautyWe.js入门详解
2019/07/10 Javascript
微信小程序框架的页面布局代码
2019/08/17 Javascript
vue+axios实现post文件下载
2019/09/25 Javascript
NodeJS模块Buffer原理及使用方法解析
2020/11/11 NodeJs
[02:25]专访DOTA2负责人Erik 国际邀请赛暂不会离开西雅
2014/07/21 DOTA
利用Python如何生成便签图片详解
2018/07/09 Python
浅析pandas 数据结构中的DataFrame
2019/10/12 Python
django使用xadmin的全局配置详解
2019/11/15 Python
Python基于pandas爬取网页表格数据
2020/05/11 Python
Python如何在循环内使用list.remove()
2020/06/01 Python
基于HTML5 Canvas 实现弹出框效果
2017/06/05 HTML / CSS
LINUX下线程,GDI类的解释
2012/04/17 面试题
介绍一下Ruby中的对象,属性和方法
2012/07/11 面试题
挂职思想汇报
2013/12/31 职场文书
电子商务专业学生职业生涯规划
2014/03/07 职场文书
学习十八大的心得体会
2014/09/01 职场文书
公务员政审个人总结
2015/02/12 职场文书
运动会主持词大全
2015/07/02 职场文书
公司庆典主持词
2015/07/04 职场文书
Python函数中的不定长参数相关知识总结
2021/06/24 Python