ES6不用循坏快速创建从0到N的数组的方法及详解

方法一:[...(new Array(n)).keys()];
方法二:Array.from({length:n},(v, k) => k);
方法三:(Array.from({length:n})).map((v,k) => k)

原理分析:

[...(new Array(n)).keys()]:

new Array(n)通过构造函数 Array 实例化一个长度为n 的数组  // [ <n empty items> ]

keys() 方法用于从数组创建一个包含数组键的可迭代对象

在ES6中有3种类型的集合对象:数组、Map集合与Set集合,为了更好地访问对象中的内容,这3种对象都内建了以下三种迭代器:

entries() 返回一个迭代器,其值为多个键值对
values() 返回一个迭代器,其值为集合的值
keys() 返回一个迭代器,其值为集合中的所有键名

let data = (new Array(3)).keys()

for (let key of data) {

    console.log(key) // 依次打印0 1 2

}

迭代器(interator):迭代器是一种特殊对象,它具有一些专门为迭代过程设计的专有接口,所有的迭代器对象都有一个next()方法,每次调用都返回一个结果对象。结果对象有两个属性:一个是value,表示下一个将要返回的值;另一个是done,它是一个布尔类型的值,当没有更多可返回数据时返回true。迭代器还会保存一个内部指针,用来指向当前集合中值的位置,每调用一次next()方法,都会返回下一个可用的值

let data = new Array(3).keys()

console.log(data.next().value) // 0

console.log(data.next().value) // 1

console.log(data.next().value) // 2

console.log(data.next().value) // undefined

...展开运算符:用途:将一个数组转为用逗号分隔的参数序列、将具有迭代器(Iterator)接口的对象,转换成数组([...可迭代对象]

let array1 = [0,1,2,3]

let array2 = [5,6,7,...array1] // [5,6,7,0,1,2,3]

在数组中使用展开运算符,可以将可迭代对象中的多个元素依次插入新数组中,替换原先展开运算符所在的位置

(new Array(n)).keys() 是一个具有迭代器(Iterator)接口的对象(上文有解释keys()返回可迭代对象),[...(new Array(n)).keys()]将可迭代对象转换为数组

Array.from({length:n},(v, k) => k)

Array.from()方法将一个类数组对象或者可遍历对象转换成一个真正的数组

Array.from (obj, mapFn): obj指的是数组对象、类似数组对象或者是set对象,mapFn指的是对数组中的元素进行处理的方法。

{length:n}: 长度为n 的类数组对象

mapFn: 传入的参数为obj对象的 value,key

(v,k)=> k:传入参数 v(值),k(键) 返回值为k,等价于

function(v,k){

   return k

}

(Array.from({length:n})).map((v,k) => k)

Array.from({length:n}): 创建长度为n 的数组
map()方法
:将原数组映射成一个新的数组;
map方法接受一个新参数,这个参数就是将原数组变成新数组的映射关系。

(v,k) => k: 传入参数v(值),k(序号), 返回k

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值