zoukankan      html  css  js  c++  java
  • Array初始化 以及 Array.prototype.map()的一些问题

    前言

    今天初始化数组的时候,map貌似失效了。浪费了我十几分钟的时间调试,看来我还是不够精通js啊

    问题描述

    初始化一个指定长度的数组,调用其map函数时,无法调用

    const arr = new Array(100); 
    arr.map((value) => {        
        console.log(value);        // 控制台什么东西也没有,也就是说代码没有被执行;
        return {}
    })
    

    Array初始化

    let arr = new Array(100);                   // 等价于 const arr = Array(100),此时为每个元素为empty,既不是null也不是undefined。map不能调用,原因看解决方案
    arr.fill(null);                             // 可以被map识别了
    
    arr = Array.apply(null, { length: 100 });   //这种初始化,每个元素为undefined,可以被map识别了
    

    Array.prototype.map()解决

    以下是MDN的解释

    map calls a provided callback function once for each element in an array, in order, and constructs a new array from the results. callback is invoked only for indexes of the array which have assigned values (including undefined).
    It is not called for missing elements of the array; that is:

    • indexes that have never been set;
    • indexes which have been deleted.

    上面讲到,map函数通过提供回调函数遍历数组的每一个元素,注意到的是,只有被assigned的元素也就是被赋值的元素才会被遍历到,通过Array或者Array构建函数构建的指定长度的,都是未指派的,不会遍历到。

    const arr = new Array(100); 
    
    console.log(arr);           // 控制台Array(100)
    
    arr.map((value) => {        // 不会执行
        console.log(value);
        return {}
    })
    
    arr[2] = 2;
    arr.map((value) => {        // 控制台只会输出一次,结果为:2
        console.log(value);
        return {}
    })
    
  • 相关阅读:
    WeX5开发指南
    移动web app开发框架
    [转]10款 Web 开发常备工具
    为兴趣求职:如何学习UI框架,请将你的看法观点写在评论下面
    10 个顶尖的 Linux 开源人工智能工具
    【转】编写Chrome扩展程序
    HDOJ 4455 Substrings 递推+树状数组
    iOS开发人员:事实上你还有非常多东西须要学
    鸡肋的JdbcRDD
    OFbiz实体引擎
  • 原文地址:https://www.cnblogs.com/panshaojun/p/14205539.html
Copyright © 2011-2022 走看看