array-algorithms

new Array(n).map((_, index) => index) cannot initialize an array


new Array(n) will create an array of n * undefined, so why can't you use new Array(n).map((_, index) => index) function to get [0, 1, 2 ..., n-1 ] What about arrays like this?

I know that new Array(n).fill(0).map((_, index) => index) is ok, but is there any essential difference between the two arrays of n * undefined and n * 0 ?

Common pits for initializing an n*m two-dimensional array:


Solution

  • Array Document

    If the only argument passed to the Array constructor is an integer between 0 and 2^32 - 1 (inclusive), this returns a new JavaScript array with its length property set to that number (Note: this implies an array of arrayLength empty slots, not slots with actual undefined values — see sparse arrays). If the argument is any other number, a RangeError exception is thrown.

    Array(n) or new Array(n) produces arrays with only length and no elements, so I call them "ghost arrays". Such an array cannot be traversed correctly with forEach or map (because there are no elements), but it is amazing that it has [@@iterator], which can be traversed using for ... of, or expanded into an array using the spread operator (eg [...Array(10)]), and can be converted using Array.from().