关闭

es6中 Array.from()函数的用法

时间: 2018-10-25阅读: 1265标签: Array

前言

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属性,他们的元素属性名必须是数值或者可以转换成数值的字符。

注意:

  1. 属性名代表了数组的索引号,如果没有这个索引号,转出来的数组中对应的元素就为length长度个undefined。
  2. 如果没有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]


原文来源:http://www.xiaolongwu.cn


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.fly63.com/article/detial/1190

Array的 every、some、filter、map的区别,以及和reduce的区别

every、some、filter、map这几个方法有时候总是傻傻分不清,尤其map,总是一下子有点懵逼记不清和其他方法的区别,每次都需要查一下API,他们的相同点都是需要遍历数组中的每一项,重点是他们的区别.

在 Array.filter 中正确使用 Async

在第一篇文章中,我们介绍了 async / await 如何帮助处理异步事件,但在异步处理集合时却无济于事。在本文中,我们将研究该filter函数,它可能是支持异步函数的最直观的方法。

js中数组创建的多种方式,数组中常用方法总汇

javascript创建数组的几种方式:1、字面量形式直接创建数组,2、Array构造函数创建数组。js数组常用的方法有哪些:join(),push()和pop(),shift() 和 unshift(),sort(),reverse(),concat()等

es6之Array.of()和Array.from()

es6新增了二种方法:Array.of()和Array.from(),它们有什么用途呢?在平时的开发中能给我们带来什么方便呢?本篇将从一个创建数组的小问题开始,逐步揭开它们的面纱。

JS中forEach的用法

orEach是ES5中操作数组的一种方法,主要功能是遍历数组,forEach方法中的function回调有三个参数:第一个参数是遍历的数组内容,第二个参数是对应的数组索引,第三个参数是数组本身

Array.slice 8种不同用法

在深入研究一些更高级的用法之前,让我们看一下slice方法的基础知识。如MDN文档,slice 是数组上的一个方法,它最多有两个参数,从该索引处开始提取原数组中的元素,如果该参数为负数,则表示从原数组中的倒数第几个元素开始提取

for in 和 for of的区别详解

for in 和 for of 相对于大家肯定都不陌生,都是用来遍历属性的没错。for ... in 循环返回的值都是数据结构的 键值名。遍历对象返回的对象的key值,遍历数组返回的数组的下标(key)。for of 循环用来获取一对键值对中的值,而 for in 获取的是 键名

js实现交换数组元素位置的方法总汇

交换数组元素位置是开发项目中经常用到的场景,总结下用过的几种方式:第三方变量、splice方法、解构赋值

js中的Array

Array 对象用于在单个的变量中存储多个值。 创建 Array 对象的语法;参数 size 是期望的数组元素个数。返回的数组,length 字段将被设为 size 的值。参数 element ..., elementn 是参数列表。当使用这些参数来调用构造函数 Array() 时

arguments转化成Array数组的方法

简单说一下arguments,arguments 就是函数内一个內建对象,它包含函数接收到的所有变量;所以,在实际开发中,我们使用arguments可以很方便的获取到所有的实参,并且也需要对其使用是写数组的方法

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!