Usando o console do Chrome, esta é minha entrada e saída:
[0].map(Array);
[[0, 0, [0]]]; // output
O que esta acontecendo aqui?
EDITAR
Isso me deixa curioso porque algo como
[0].map(String);
Retornará
["0"];
E não
["0", "0", "String"]
javascript
Jacksonkr
fonte
fonte
['10', '10', '10'].map(parseInt)
.map()
comportamento estranho : stackoverflow.com/questions/14528397/… Em geral, você deve ter cuidado ao usar.map()
com funções que usam mais de um argumento.[0].map(console.log)
Respostas:
A
.map()
função está chamando aArray()
função com três argumentos, o valor do elemento da matriz, que é0
, o índice desse elemento, também0
, e uma referência a toda a matriz.Então é como fazer isso:
A matriz retornada por
Array()
then torna-se o primeiro elemento da matriz que.map()
cria, portanto, o nível extra de aninhamento em seu[[0, 0, [0]]]
resultado.EDIT com relação à sua edição: quando você diz
[0].map(String);
que resulta emString()
ser chamado com os mesmos três argumentos comoString(a[index], index, a)
, mas aString()
função ignora todos, exceto o primeiro argumento, enquantoArray()
usa todos os argumentos fornecidos.fonte
Em primeiro lugar ,
Array
pode ser usado como uma função para criar matrizes:Em segundo lugar ,
map
passa três parâmetros para seu retorno de chamada: o elemento, seu índice do array e o próprio array.Portanto , como sua matriz contém um elemento, a linha:
é equivalente a:
fonte
Depois de atualizar a pergunta. Outras respostas fornecem informações sobre o mapa
Para responder por que array e string são diferentes, olhe para os construtores
Construtor de string aceita 1 parâmetro String (coisa) enquanto array new Array (element0, element1 [, ... [, elementN]])
fonte
.map(Number)
converte cada item em um número, em vez de retornar algo como[3, 2, [4, 1, 3]]
para cada item.Esta chamada
fornece o mesmo resultado como se você escrevesse algo assim:
A função Map está chamando a função Array com três parâmetros: valor do elemento, índice do elemento e array inteiro. Esta chamada para
Array
retorna o array com 3 elementos: valor (número0
), índice (número0
), array inteiro ([0]
).E esse novo array é empacotado no Array original, porque você combinou o elemento original (número
0
) com o novo elemento (array de 3 elementos)Nota: Você pode estar acostumado a usar apenas o primeiro parâmetro como em
ou usando apenas dois para obter também o índice
Mas você precisa se lembrar que
map
ainda fornece 3 parâmetros, você apenas os ignora em sua função de retorno de chamada. Esse também é o motivo pelo qual códigos como:retorna
É porque a função String se preocupa apenas com o primeiro parâmetro e ignora outros parâmetros passados. Se você ligar
você ainda vai conseguir
fonte