• 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 {}
    })
    
  • 相关阅读:
    js动态给对象添加事件
    JavaScript中提供获取HTML元素位置的属性:
    javascript:是什么意思
    Vector与ArrayList区别
    Java核心类库——集合的迭代(遍历) Iterator接口
    实例1(文字的放大缩小)
    基本控件的使用
    关于Android那些事
    初识Android
    JavaScript(Two)
  • 原文地址:https://www.cnblogs.com/panshaojun/p/14205539.html
Copyright © 2020-2023  润新知