• js 生成自定义数组


    在原生js中,创建数组的常见方式有两种:Array() 或 new Array() 和 [] 方式.

    构造函数创建数组和字面量定义数组的差异不谈,

    当我们需要给创建数组赋初始值时,如果量少的话,可以直接通过

    let arr = [2,4] 的方式创建;

    而当量大而重复的时候,可以通过以下的方式创建:

    Array.apply(null,{length:20}).map(()=>2)

    //(20) [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]

    等同于:

    Array.apply(null,Array(20)).map(()=>2) //(20) [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]

    如果需要递增赋值的话:

    Array.apply(null,{length:20}).map((v,i)=>i) (20) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

    以上的语法也可以写成:

    Array(...Array(20)).map((v,i)=>i) (20) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

    可能有人会疑惑,为什么要Array(...Array(20))这么麻烦的来创建数组呢,直接Array(20)再通过map()来赋值不可以吗?

    这是因为直接通过Array(20)的方式创建的数组,只有长度没有索引值,

    Array(20) (20) [empty × 20]

    Array(20)[2] //undefined

    2 in Array(20) //false

    而map ()方法会给原数组中的每个元素都按顺序调用一次 callback 函数。callback 每次执行后的返回值(包括 undefined)组合起来形成一个新数组。

    callback 函数只会在有值的索引上被调用;那些从来没被赋过值或者使用 delete 删除的索引则不会被调用。

    再看:

    Array(...Array(20)) (20) [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]

    2 in Array(...Array(20)) //true

    所以就可以调用map()方法了

    另外,直接通过

    Array(20).fill(2) (20) [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]

    也能很轻松的赋值了

  • 相关阅读:
    Linux线程信号
    有理想的程序员必须知道的15件事
    Linux下 mplayer 使用手册
    Winxp下 gvim 编程环境搭建
    在WPF中弹出右键菜单时判断鼠标是否选中该项
    F#基本类型——Discriminated Unions
    在WPF的TreeView中实现右键选定
    WPF TreeView tools
    F#基本类型——Structure
    增强了一下DownloaderPlus的视频转换功能
  • 原文地址:https://www.cnblogs.com/fdd-111/p/13334157.html
Copyright © 2020-2023  润新知