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 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
Dec 28 Javascript
js中一个函数获取另一个函数返回值问题探讨
Nov 21 Javascript
JS中的数组的sort方法使用示例
Jan 22 Javascript
调试JavaScript中正则表达式中遇到的问题
Jan 27 Javascript
AngularJs基于角色的前端访问控制的实现
Nov 07 Javascript
基于jQuery的select下拉框选择触发事件实例分析
Nov 18 Javascript
JavaScript如何实现图片懒加载(lazyload) 提高用户体验(增强版)
Nov 30 Javascript
一个简易时钟效果js实现代码
Mar 25 Javascript
微信公众号生成新浪短网址的实现(快速生成)
Aug 18 Javascript
微信小程序按钮点击动画效果的实现
Sep 04 Javascript
javascript实现扫雷简易版
Aug 18 Javascript
浅谈 JavaScript 沙箱Sandbox
Nov 02 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
PHP与MySQL开发的8个技巧小结
2010/12/17 PHP
利用php实现禁用IE和火狐的缓存问题
2012/12/03 PHP
PHP的构造方法,析构方法和this关键字详细介绍
2013/10/22 PHP
php身份证号码检查类实例
2015/06/18 PHP
Smarty变量用法详解
2016/05/11 PHP
jquery 得到当前页面高度和宽度的两个函数
2010/02/21 Javascript
禁用页面部分JavaScript方法的具体实现
2013/07/31 Javascript
js形成页面的一种遮罩效果实例代码
2014/01/04 Javascript
js实现身份证号码验证的简单实例
2014/02/19 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
使用AJAX实现Web页面进度条的实例分享
2016/05/06 Javascript
JavaScript实现Fly Bird小游戏
2016/12/15 Javascript
bootstrap组件之按钮式下拉菜单小结
2017/01/19 Javascript
Ionic+AngularJS实现登录和注册带验证功能
2017/02/09 Javascript
强大的JavaScript响应式图表Chartist.js的使用
2017/09/13 Javascript
浅谈Vue 数据响应式原理
2018/05/07 Javascript
在webstorm开发微信小程序之使用阿里自定义字体图标的方法
2018/11/15 Javascript
大转盘抽奖小程序版 转盘抽奖网页版
2020/04/16 Javascript
vue-for循环嵌套操作示例
2019/01/28 Javascript
vue2.x数组劫持原理的实现
2020/04/19 Javascript
python结合selenium获取XX省交通违章数据的实现思路及代码
2016/06/26 Python
python实现二维码扫码自动登录淘宝
2016/12/27 Python
django小技巧之html模板中调用对象属性或对象的方法
2018/11/30 Python
python检查目录文件权限并修改目录文件权限的操作
2020/03/11 Python
Python telnet登陆功能实现代码
2020/04/16 Python
windows系统Tensorflow2.x简单安装记录(图文)
2021/01/18 Python
2014年圣诞节倒计时网页的制作过程
2014/12/05 HTML / CSS
HTML5拍照和摄像机功能实战详解
2019/01/24 HTML / CSS
怀旧香味蜡烛:Homesick
2019/11/02 全球购物
财务人员个人自荐信范文
2013/09/26 职场文书
春节联欢晚会主持词
2014/03/24 职场文书
班主任个人工作反思
2014/04/28 职场文书
作风建设年度心得体会
2014/10/29 职场文书
检讨书范文300字
2015/01/28 职场文书
个人业务学习心得体会
2016/01/25 职场文书
MySQL 8.0 之不可见列的基本操作
2021/05/20 MySQL