Using the Chrome Console, this is my input and output:
[0].map(Array); [[0, 0, [0]]]; // output
What is happening here?
EDIT
The reason this makes me curious is because something like
[0].map(String);
Will return
["0"];
And not
["0", "0", "String"]
Definition and Usage. map() creates a new array from calling a function for every array element. map() calls a function once for each element in an array. map() does not execute the function for empty elements. map() does not change the original array.
map() function returns a map object(which is an iterator) of the results after applying the given function to each item of a given iterable (list, tuple etc.) Parameters : fun : It is a function to which map passes each element of given iterable.
The map() method creates a new array populated with the results of calling a provided function on every element in the calling array.
ES6 - Array Method map() map() method creates a new array with the results of calling a provided function on every element in this array.
The .map()
function is calling the Array()
function with three arguments, the value of the array element which is 0
, the index of that element, also 0
, and a reference to the whole array.
So it's like doing this:
var a = [0]; var index = 0 Array(a[index], index, a); // create array with three elements
The array returned by Array()
then becomes the first element of the array that .map()
creates, hence the extra level of nesting in your [[0, 0, [0]]]
result.
EDIT regarding your edit: when you say [0].map(String);
that results in String()
being called with the same three arguments like String(a[index], index, a)
, but the String()
function ignores all but the first argument, whereas Array()
uses all supplied arguments.
Firstly, Array
could be used as a function to create arrays:
var arr = Array(1, 2, "Hello"); console.log(arr); // [1, 2, "Hello"]
Secondly, map
passes three parameters to its callback: the element, its index from the array and the array itself.
So, since your array contains one element, the line:
[0].map(Array);
is equivalent to:
[Array(0, 0, [0])]; // the element 0 in the original array will be mapped into Array(0, 0, [0])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With