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 {}
    })
    
  • 相关阅读:
    WinForm 清空界面控件值的小技巧
    MVC 图片上传总是request.files.count() 等于0
    LinqToSQL 左连接右连接内链接
    C# utc datetime 互相转化
    mvc javascript form.submit()
    Java API中文版下载
    jQuery的链式操作
    【转】Eclipse/MyEclipse中使用复制粘贴功能卡的解决办法
    servlet什么时候被实例化?
    Jquery总结 $("h3 a", patch);
  • 原文地址:https://www.cnblogs.com/panshaojun/p/14205539.html
Copyright © 2011-2022 走看看