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 相关文章推荐
动态调用CSS文件的JS代码
Jul 29 Javascript
从零开始学习jQuery (十) jQueryUI常用功能实战
Feb 23 Javascript
工作需要写的一个js拖拽组件
Jul 28 Javascript
Extjs4中Form的使用之本地hiddenfield
Nov 26 Javascript
使用jQuery的attr方法来修改onclick值
Jul 07 Javascript
Bootstrap每天必学之表单
Nov 23 Javascript
JS使用面向对象技术实现的tab选项卡效果示例
Feb 28 Javascript
jQuery简单实现MD5加密的方法
Mar 03 Javascript
angular中使用Socket.io实例代码
Jun 03 Javascript
jQuery替换节点元素的操作方法
Mar 18 jQuery
vue 权限认证token的实现方法
Jul 17 Javascript
javascript之分片上传,断点续传的实际项目实现详解
Sep 05 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
关于mysql 字段的那个点为是定界符
2007/01/15 PHP
PHPCMS的使用小结
2010/09/20 PHP
thinkphp中字符截取函数msubstr()用法分析
2016/01/09 PHP
动态加载js的几种方法
2006/10/23 Javascript
JavaScript中数组成员的添加、删除介绍
2014/12/30 Javascript
jQuery结合AJAX之在页面滚动时从服务器加载数据
2015/06/30 Javascript
jquery实现表单验证并阻止非法提交
2015/07/09 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
2015/12/16 Javascript
jQuery简单验证上传文件大小及类型的方法
2016/06/02 Javascript
微信小程序 canvas API详解及实例代码
2016/10/08 Javascript
JavaScript实现数组降维详解
2017/01/05 Javascript
javascript 中模板方法单例的实现方法
2017/10/17 Javascript
微信小程序实现漂亮的弹窗效果
2020/05/26 Javascript
微信小程序实现蓝牙打印
2019/09/23 Javascript
微信小程序 textarea 层级过高问题简单解决方案
2019/10/14 Javascript
Postman如何实现参数化执行及断言处理
2020/07/28 Javascript
JavaScript Dom实现轮播图原理和实例
2021/02/19 Javascript
[04:29]2016国际邀请赛中国区预选赛Ehome战队教练采访
2016/06/27 DOTA
Python基于smtplib实现异步发送邮件服务
2015/05/28 Python
Python button选取本地图片并显示的实例
2019/06/13 Python
Python二次规划和线性规划使用实例
2019/12/09 Python
python判断一个变量是否已经设置的方法
2020/08/13 Python
Python模拟键盘输入自动登录TGP
2020/11/27 Python
移动端rem布局的两种实现方法
2018/01/03 HTML / CSS
CSS3 border-image详解、应用及jQuery插件
2011/08/29 HTML / CSS
番木瓜健康和保健产品第一大制造商:Herbal Papaya
2017/04/25 全球购物
比利时家具购买网站:Home24
2019/01/03 全球购物
班组长岗位职责
2014/03/03 职场文书
节能宣传周活动总结
2014/05/08 职场文书
2014世界杯球队球队口号
2014/06/05 职场文书
升学宴答谢词
2015/01/05 职场文书
感谢信格式范文
2015/01/22 职场文书
感恩教师节主题班会
2015/08/12 职场文书
陶瓷类经典广告语集锦
2019/10/25 职场文书
SpringBoot实现异步事件驱动的方法
2021/06/28 Java/Android
使用scrapy实现增量式爬取方式
2022/06/21 Python