new Array(10) 无法使用map

2,249 阅读1分钟

1.当使用new Array(10),实际上是创建一个空是数组对象,属性length =10
除此以外,这个对象是一个空对象。对象中并没有数组对应的索引键(index key)

        const arr = new Array(10);
        //arr (10) [empty × 10]

2.mapreducefilterforEach 等高阶函数沿着数组的索引键遍历;

        const arr = new Array(10);
        arr.map(v=>{
            console.log('v',v)
        })
        //并不会执行map的回调。
        //map 对数组遍历时没有执行回调函数–就是因为索引键并不存在
        const arr = new Array(10,20);
        arr[5]=50;
        arr.map(v=>{
            console.log('v',v) 
        })
        //10,20,50

3.解决办法
a.使用扩展运算符 ...
它对数组(或者任何可遍历对象)进行从 0 到数组长度的简单循环;

        const arr = new Array(2);
        [...arr].map(v=>{
            console.log(v)
        })
        //undefined undefined

b.可以使用 Array.from({length:2})

        const arr = Array.from({length:2})
        arr.map(v=>{
            console.log(v)
        })
        //undefined undefined