LinDaiDai/niubility-coding-js

🍃第1期第2题:请创建一个长度为100,值为对应下标的数组

Opened this issue · 0 comments

请创建一个长度为100,值为对应下标的数组

// cool点的写法:
[...Array(100).keys()]

// 其他方法:
Array(100).join(",").split(",").map((v, i) => i)
Array(100).fill().map((v, i) => i)

后面两种方法相信大家都能看到懂,也没啥好说的了😄,让我们仔细看一下这个比较cool的写法:

  • 使用Array(100)创建一个内容全为empty的数组:[empty x 100]

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

    可迭代对象是不是让你想到了generator,没错的,这里的keys()Array.prototype上的方法,大家可能会把它和我们之前用的比较多的Object.keys()搞混。

    说一下它的作用吧,它其实就像刚刚介绍的一样,会创建一个可迭代对象,那么小伙伴们应该知道,一个可迭代对象返回的数据会是这样的:

    { value: 0, done: false }
    

    value为这次的返回值,done为当前可迭代对象的逻辑块是否执行完成。

    所以你会看到以下这段代码是会这样执行的:

    let it = Array(100).keys()
    console.log(it.next) // {value: 0, done: false}
    console.log(it.next) // {value: 1, done: false}
    console.log(it.next) // {value: 2, done: false}
    console.log(it.next) // {value: 3, done: false}
  • 至于[...arr]这个就是ES6的写法了,转化为数组,当然你也可以直接用Array.from()。这两种方式都支持将可迭代对象转换为数组。