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分页脚本
May 21 Javascript
jquery 插件实现图片延迟加载效果代码
Feb 06 Javascript
chrome浏览器不支持onmouseleave事件的解决技巧
May 31 Javascript
Bootstrap 粘页脚效果
Mar 28 Javascript
原生JS封装Ajax插件(同域、jsonp跨域)
May 03 Javascript
Js动态设置rem来实现移动端字体的自适应代码
Oct 14 Javascript
Angular.js实现多个checkbox只能选择一个的方法示例
Feb 24 Javascript
微信小程序顶部可滚动导航效果
Oct 31 Javascript
JQuery 又谈ajax局部刷新
Nov 27 jQuery
vue中实现methods一个方法调用另外一个方法
Feb 08 Javascript
layui监听下拉选框选中值变化的方法(包含监听普通下拉选框)
Sep 24 Javascript
js实现简单的贪吃蛇游戏
Apr 23 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
VML绘图板②脚本--VMLgraph.js、XMLtool.js
2006/10/09 PHP
PHP同时连接多个mysql数据库示例代码
2014/03/17 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
2014/11/22 PHP
复制本贴标题和地址的js代码
2008/07/01 Javascript
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
2012/12/17 Javascript
jQuery中click事件用法实例
2014/12/26 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
2015/08/06 Javascript
jQuery下拉美化搜索表单效果代码分享
2015/08/25 Javascript
AngularJs Javascript MVC 框架
2016/06/20 Javascript
jQuery+CSS实现简单切换菜单示例
2016/07/27 Javascript
Bootstrap基本组件学习笔记之进度条(15)
2016/12/08 Javascript
JavaScript中splice与slice的区别
2017/05/09 Javascript
AngularJS全局警告框实现方法示例
2017/05/18 Javascript
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
2017/09/19 Javascript
5分钟快速掌握JS中var、let和const的异同
2018/09/19 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
2019/09/23 Javascript
Vue实现开关按钮拖拽效果
2020/09/22 Javascript
python查找目录下指定扩展名的文件实例
2015/04/01 Python
python字典get()方法用法分析
2015/04/17 Python
python获取一组数据里最大值max函数用法实例
2015/05/26 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
2018/04/21 Python
python实现微信自动回复机器人功能
2019/07/11 Python
python实现七段数码管和倒计时效果
2019/11/23 Python
python实现飞机大战游戏(pygame版)
2020/10/26 Python
前端canvas水印快速制作(附完整代码)
2019/09/19 HTML / CSS
韩国三大免税店之一:THE GRAND 中文免税店
2016/07/21 全球购物
《回乡偶书》教学反思
2014/04/12 职场文书
自我介绍演讲稿范文
2014/08/21 职场文书
2014年卫生院工作总结
2014/12/03 职场文书
党员自评材料范文
2014/12/17 职场文书
大学生学年个人总结
2015/02/15 职场文书
员工表扬信怎么写
2015/05/05 职场文书
《暗黑破坏神2:重制版》本周进行第一轮A测 目前可官网进行申请报名
2021/04/07 其他游戏
关于CentOS 8 搭建MongoDB4.4分片集群的问题
2021/10/24 MongoDB
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android