ES6中的Array.from()函数的用法
ES6为Array增加了from函数用来将其他对象转换成数组。
当然,其他对象也是有要求,也不是所有的,可以将两种对象转换成数组。
1.部署了Iterator(迭代器)接口的对象,比如:Set,Map,Array。 2.类数组对象,什么叫类数组对象,就是一个对象必须有length属性,没有length,转出来的就是空数组。
具体用法
Array.from可以接受三个参数
我们看定义:Array.from(arrayLike [, mapFn [, thisArg]])
arrayLike:被转换的的对象。 mapFn:map函数。 thisArg:map函数中this指向的对象。
第一个参数
在这里很好理解,就是要被转换的对象
第二个参数,map函数
用来对转换中的每一个元素进行加工,并将加工后的结果作为结果数组的元素值。
console.log(Array.from([1, 2, 3, 4, 5], (n) => n + 1)) // 结果[2,3,4,5,6] map函数的实际的做用是给每个元素都加了1
第三个参数,map函数中this指向的对象
该参数是非常有用的,我们可以将被处理的数据和处理对象分离,将各种不同的处理数据的方法封装到不同的的对象中去,处理方法采用相同的名字。
在调用Array.from对数据对象进行转换时,可以将不同的处理对象按实际情况进行注入,以得到不同的结果,适合解耦。
这种做法是模板设计模式的应用,有点类似于依赖注入。
const obj = {
add: function (n) {
return n + 1;
}
}
console.log( Array.from(
[1, 2, 3, 4, 5],
function (x){
return this.add(x)
},
obj))
//结果 [2,3,4,5,6]
转换set对象
const setArr = new Set();
setArr.add(1).add(2).add("www");
console.log(Array.from(setArr));
// 结果 [1, 2, "www"] const setArr1 = new Set([1,1,12,2,3,4,5,5,6,6]);
console.log(Array.from(setArr1));
// 或者使用展开表达式 console.log([...setArr1]);
// 结果 [1, 12, 2, 3, 4, 5, 6]
// 同时不难发现set具有去重的功能
转换map对象
const mapArr = new Map();
mapArr.set('m1', 1);
mapArr.set('m2', 2);
mapArr.set('m3', 3);
console.log(Array.from(mapArr));
// 结果 [['m1', 1],['m2', 2],['m3', 3]]
console.log(Array.from(mapArr)[1]);
// 结果 ["m2", 2]
转换类数组对象
一个类数组对象必须要有length属性,他们的元素属性名必须是数值或者可以转换成数值的字符。
注意:
- 属性名代表了数组的索引号,如果没有这个索引号,转出来的数组中对应的元素就为length长度个undefined。
- 如果没有length属性,转换出来的数组也是空的;
带length
//注意看区别
console.log(Array.from({
0: 'dd',
1: 'gg',
2: 'w3',
length:3
}))
// 结果 ["dd", "gg", "w3"] console.log(Array.from({
0: 'dd',
1: 'gg',
4: 'w3',
length:3
}))
// 结果 ["dd", "gg", undefined] console.log(Array.from({
"0": 'dd',
1: 'gg',
"3": 'w3',
length:6
}))
// 结果 ["dd", "gg", undefined, "w3", undefined, undefined] //总结,生成数组的长度由length属性确定,如果相应索引位置上没有值,则为undefined
不带length
console.log( Array.from({
0: 3,
1: 12
}))
// 结果 []
对象的属性名不能转换成索引号时
console.log(Array.from({
"s": 'dd',
"ss": 'gg',
"n": 'w3',
length:3
}))
// 结果 [undefined, undefined, undefined]
补充

ES6中的Array.from()函数的用法的更多相关文章
- ES6,Array.includes()函数的用法
在ES5,Array已经提供了indexOf用来查找某个元素的位置,如果不存在就返回-1,但是这个函数在判断数组是否包含某个元素时有两个小不足,第一个是它会返回-1和元素的位置来表示是否包含,在定位方 ...
- Array.fill()函数的用法
ES6,Array.fill()函数的用法 ES6为Array增加了fill()函数,使用制定的元素填充数组,其实就是用默认内容初始化数组. 该函数有三个参数. arr.fill(value, s ...
- C++中rand()函数的用法
C++中rand()函数的用法 2011-12-30 11:03:59| 分类: C / C++|举报|字号 订阅 一.C++中不能使用random()函数 random函数不是ANSI C标准 ...
- MATLAB中“repmat”与“cat”函数的用法
MATLAB中“repmat”与“cat”函数的用法 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. repmat函数 >> z=re ...
- Pytorch中randn和rand函数的用法
Pytorch中randn和rand函数的用法 randn torch.randn(*sizes, out=None) → Tensor 返回一个包含了从标准正态分布中抽取的一组随机数的张量 size ...
- ES6,Array.of()函数的用法
ES6为Array增加了of函数用已一种明确的含义将一个或多个值转换成数组. 因为,用new Array()构造数组的时候,是有二意性的. 构造时,传一个参数,表示生成多大的数组. 构造时,传多个参数 ...
- 转:随机函数 C++中rand()函数的用法
转自:http://blog.163.com/wujiaxing009@126/blog/static/719883992011113011359154/ 一.C++中不能使用random()函数 ...
- ES6中的高阶函数:如同 a => b => c 一样简单
作者:Sequoia McDowell 2016年01月16日 ES6来啦!随着越来越多的代码库和思潮引领者开始在他们的代码中使用ES6,以往被认为是"仅需了解"的ES6特性变成了 ...
- 利用ES6中的Array.find/ Array.findIndex来判断数组中已存在某个对象
前端开发过程中,我们会经常遇到这样的情景:比如选中某个指标obj,将其加入到数组checkedArr中({id: 1234, name: 'zzz', ...}),但是在将其选中之前要校验该指标是否已 ...
随机推荐
- GTX 750TI 使用 ffmpeg 时无法用 GPU HEVC(h.265) 进行加速
官网版本好像不是能加速的,所以在github上找到一个已经带gpu加速的. https://github.com/illuspas/ffmpeg-hw-win32 GPU加速命令格式: ffmpeg. ...
- 用jQuery实现切换动态图片
1.实现动态图片的切换只需要改变目标图片的路径
- web.xml的<url-parttern>的匹配规则
<url-parttern>顾名思义是对url(统一资源定位符)的一种匹配,是对“http:........."地址的匹配,但是会减去应用上下文,就是你的web程序的名字,如果你 ...
- SpringBoot 动态更新 resources 目录的文件
一.前言 SpringBoot 打成 Jar 包形式运行后 ,resources 目录下文件的读取修改和原来不太一样,网上比较多的是关于读取的方式,修改的几乎没有,终于在 stackoverflow ...
- css选择器概述
css选择器种类 id选择器 类选择器.属性选择器.伪类选择器 元素选择器.伪元素选择器 通配符选择器.子类选择器.后代选择器.相邻兄弟选择器.选择器分组 一.id选择器 <p id=" ...
- java 线程方法 ---- wait()
class MyThread5 implements Runnable{ private int flag = 10; @Override public void run() { while (fla ...
- 客户端传值里面包含URL特殊字符的应对方法
URL传递值的时候参数里面含有%2f等URL转义问题可通过URLDecoder.decode(字符串,“utf-8”);的方法去转义为"/". 此外:URLEncoder是将字符串 ...
- mysql的严格模式与无效字符编码问题
问题一般格式为: 1366 Incorrect string value: '' for column 1300 Invalid utf8 character string: '' 向mysql插入中 ...
- MyDAL - .Where() 之 .WhereSegment 根据条件 动态设置 Select查询条件 使用
索引: 目录索引 一.API 列表 1.WhereSegment 属性,指示 根据条件 动态拼接 where 查询过滤条件 见如下示例. 二.API 单表-完整 方法 举例 // 上下文条件 变量 v ...
- win10 桌面设置为远程桌面
查看方法: 1.点击桌面“计算机”,右键,点击属性. 2.在计算机属性系统窗口中点击“远程设置”. 3.在“系统属性”对话框中远程协助勾选“允许远程协助连接这台计算机”. 4.在“远程协助”点击“高级 ...