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 相关文章推荐
JS实现打开本地文件或文件夹
Mar 09 Javascript
Javascript 构造函数 实例分析
Nov 26 Javascript
js获取html参数及向swf传递参数应用介绍
Feb 18 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
May 18 Javascript
javascript编写贪吃蛇游戏
Jul 07 Javascript
JS命令模式例子之菜单程序
Oct 10 Javascript
Java与JavaScript中判断两字符串是否相等的区别
Mar 13 Javascript
JS处理数据四舍五入(tofixed与round的区别详解)
Oct 26 Javascript
vue引入ueditor及node后台配置详解
Jan 03 Javascript
vue.js,ajax渲染页面的实例
Feb 11 Javascript
微信小程序实现带缩略图轮播效果
Nov 04 Javascript
Vue实现动态查询规则生成组件
May 27 Vue.js
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
PHP中数组定义的几种方法
2013/09/01 PHP
php文件上传的简单实例
2013/10/19 PHP
Laravel 5框架学习之路由、控制器和视图简介
2015/04/07 PHP
PHP实现微信红包金额拆分试玩的算法示例
2018/04/07 PHP
ie 处理 gif动画 的onload 事件的一个 bug
2007/04/12 Javascript
jQuery插件开发基础简单介绍
2013/01/07 Javascript
JQuery对id中含有特殊字符的转义处理示例
2013/09/06 Javascript
jQuery圆形统计图开发实例
2015/01/04 Javascript
jQuery老黄历完整实现方法
2015/01/16 Javascript
js中作用域的实例解析
2017/03/16 Javascript
基于javascript 显式转换与隐式转换(详解)
2017/12/15 Javascript
Node.js使用cookie保持登录的方法
2018/05/11 Javascript
在vue 中使用 less的教程详解
2018/09/26 Javascript
mpvue+vant app搭建微信小程序的方法步骤
2019/02/11 Javascript
javascript中的闭包概念与用法实践分析
2019/07/26 Javascript
[01:08:17]2018DOTA2亚洲邀请赛3月29日 小组赛B组 EG VS VGJ.T
2018/03/30 DOTA
采用Psyco实现python执行速度提高到与编译语言一样的水平
2014/10/11 Python
python通过pil将图片转换成黑白效果的方法
2015/03/16 Python
Python中返回字典键的值的values()方法使用
2015/05/22 Python
python fabric实现远程部署
2017/01/05 Python
Python实现求笛卡尔乘积的方法
2017/09/16 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
python time.sleep()是睡眠线程还是进程
2019/07/09 Python
Python符号计算之实现函数极限的方法
2019/07/15 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
Spartoo西班牙官网:法国时尚购物网站
2018/03/27 全球购物
联想德国官网:Lenovo Germany
2018/07/04 全球购物
JDO的含义
2012/11/17 面试题
国际贸易系求职信
2014/08/09 职场文书
铣工实训报告
2014/11/05 职场文书
继承公证书格式
2015/01/26 职场文书
求职自我评价怎么写
2015/03/09 职场文书
2015年会计个人工作总结
2015/04/02 职场文书
大学生暑假实习总结
2015/07/13 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android