Usando la consola de Chrome, esta es mi entrada y salida:
[0].map(Array);
[[0, 0, [0]]]; // output
¿Que está sucediendo aquí?
EDITAR
La razón por la que esto me da curiosidad es porque algo como
[0].map(String);
Volverá
["0"];
Y no
["0", "0", "String"]
javascript
Jacksonkr
fuente
fuente
['10', '10', '10'].map(parseInt)
.map()
comportamiento extraño : stackoverflow.com/questions/14528397/… En general, debes tener cuidado al usar.map()
funciones que toman más de un argumento.[0].map(console.log)
Respuestas:
La
.map()
función llama a laArray()
función con tres argumentos, el valor del elemento de la matriz que es0
, el índice de ese elemento, también0
, y una referencia a toda la matriz.Entonces es como hacer esto:
La matriz devuelta por
Array()
entonces se convierte en el primer elemento de la matriz que.map()
crea, de ahí el nivel adicional de anidación en su[[0, 0, [0]]]
resultado.EDITAR con respecto a su edición: cuando dice
[0].map(String);
que resulta enString()
ser llamado con los mismos tres argumentos comoString(a[index], index, a)
, pero laString()
función ignora todos menos el primer argumento, mientras queArray()
usa todos los argumentos proporcionados.fuente
En primer lugar ,
Array
podría usarse como una función para crear matrices:En segundo lugar ,
map
pasa tres parámetros a su devolución de llamada: el elemento, su índice de la matriz y la propia matriz.Entonces , dado que su matriz contiene un elemento, la línea:
es equivalente a:
fuente
Después de actualizar la pregunta. Otras respuestas le brindan información sobre el mapa
Para responder por qué la matriz y la cadena difieren en los constructores
El constructor de cadenas acepta 1 parámetro String (cosa) mientras que la matriz nueva Array (elemento0, elemento1 [, ... [, elementoN]])
fuente
.map(Number)
convierte cada artículo en un número en lugar de devolver algo como[3, 2, [4, 1, 3]]
para cada artículo.Esta llamada
le da el mismo resultado que si escribiera algo como esto:
La función de mapa llama a la función Array con tres parámetros: valor del elemento, índice del elemento y matriz completa. Esta llamada a
Array
devuelve su matriz con 3 elementos: valor (número0
), índice (número0
), matriz completa ([0]
).Y esta nueva matriz está envuelta en la matriz original, porque asignó el elemento original (número
0
) al nuevo elemento (matriz de 3 elementos)Nota: Es posible que esté acostumbrado a usar solo el primer parámetro como en
o usando solo dos para obtener también el índice
Pero debe recordar que
map
aún proporciona 3 parámetros, simplemente ignórelos en su función de devolución de llamada. Esa también es la razón por la que un código como:devoluciones
Es porque la función String se preocupa solo por el primer parámetro e ignora otros parámetros pasados. Si llamas
todavía obtendrás
fuente