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 捕获窗口关闭事件
Jul 26 Javascript
js css后面所带参数含义介绍
Aug 18 Javascript
jQuery循环滚动新闻列表示例代码
Jun 17 Javascript
JavaScript常用脚本汇总(二)
Mar 04 Javascript
学习JavaScript鼠标响应事件
Dec 25 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
May 09 Javascript
模拟javascript中的sort排序(简单实例)
Aug 17 Javascript
JS实现鼠标移上去显示图片或微信二维码
Dec 14 Javascript
微信小程序使用audio组件播放音乐功能示例【附源码下载】
Dec 08 Javascript
jQuery实现碰到边缘反弹的动画效果
Feb 24 jQuery
分享Angular http interceptors 拦截器使用(推荐)
Nov 10 Javascript
Vue快速实现通用表单验证的方法
Feb 24 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
手冲咖啡应该是现代精品咖啡店的必备选项吗?
2021/03/03 冲泡冲煮
PHP注释实例技巧
2008/10/03 PHP
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
2011/07/12 PHP
php中大括号作用介绍
2012/03/22 PHP
关于使用coreseek并为其做分页的介绍
2013/06/21 PHP
php邮件发送的两种方式
2020/04/28 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
2016/03/07 PHP
php自定义函数实现二维数组排序功能
2016/07/20 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
2020/08/24 PHP
js跨域问题之跨域iframe自适应大小实现代码
2010/07/17 Javascript
Javascript Ajax异步读取RSS文档具体实现
2013/12/12 Javascript
javascript常用经典算法实例详解
2015/11/25 Javascript
jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
2017/04/02 jQuery
移动端触屏幻灯片图片切换插件idangerous swiper.js
2017/04/10 Javascript
Vue.js实现实例搜索应用功能详细代码
2017/08/24 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
详解vue-router数据加载与缓存使用总结
2018/10/29 Javascript
JavaScript中的事件与异常捕获详析
2019/02/24 Javascript
JavaScript图片旋转效果实现方法详解
2020/06/28 Javascript
Ant Design的可编辑Tree的实现操作
2020/10/31 Javascript
[52:29]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第三局
2016/03/03 DOTA
[42:32]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第二场 10.28
2020/10/28 DOTA
windows下python模拟鼠标点击和键盘输示例
2014/02/28 Python
Python程序员开发中常犯的10个错误
2014/07/07 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
2019/06/03 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
2020/01/13 Python
解决python图像处理图像赋值后变为白色的问题
2020/06/04 Python
浅谈sklearn中predict与predict_proba区别
2020/06/28 Python
如何在python中实现线性回归
2020/08/10 Python
西班牙灯具网上商店:Lampara.es
2018/06/05 全球购物
重阳节登山活动方案
2014/02/03 职场文书
交通安全教育心得体会
2016/01/15 职场文书
《角的度量》教学反思
2016/02/18 职场文书
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL
Android实现获取短信验证码并自动填充
2023/05/21 Java/Android