En utilisant la console Chrome, voici mon entrée et ma sortie:
[0].map(Array);
[[0, 0, [0]]]; // output
Que se passe-t-il ici?
ÉDITER
La raison pour laquelle cela me rend curieux est que quelque chose comme
[0].map(String);
Reviendra
["0"];
Et pas
["0", "0", "String"]
javascript
Jacksonkr
la source
la source
['10', '10', '10'].map(parseInt)
.map()
comportement étrange : stackoverflow.com/questions/14528397/ ... En général, vous devez être prudent lorsque vous utilisez.map()
des fonctions qui prennent plus d'un argument.[0].map(console.log)
Réponses:
La
.map()
fonction appelle laArray()
fonction avec trois arguments, la valeur de l'élément de tableau qui est0
, l'index de cet élément, également0
, et une référence à l'ensemble du tableau.Donc c'est comme faire ça:
Le tableau renvoyé par
Array()
devient alors le premier élément du tableau qui.map()
crée, d'où le niveau supplémentaire d'imbrication dans votre[[0, 0, [0]]]
résultat.EDIT concernant votre modification: lorsque vous dites
[0].map(String);
que cela entraîneString()
un appel avec les trois mêmes arguments commeString(a[index], index, a)
, mais laString()
fonction ignore tout sauf le premier argument, alors qu'elleArray()
utilise tous les arguments fournis.la source
Tout d'abord ,
Array
pourrait être utilisé comme une fonction pour créer des tableaux:Deuxièmement ,
map
passe trois paramètres à son rappel: l'élément, son index du tableau et le tableau lui-même.Donc , puisque votre tableau contient un élément, la ligne:
est équivalent à:
la source
Après avoir mis à jour la question. D'autres réponses vous fournissent des informations sur la carte
Pour expliquer pourquoi tableau et chaîne diffèrent, regardez les constructeurs
Le constructeur de chaînes accepte 1 paramètre String (chose) pendant que le tableau est nouveau Array (élément0, élément1 [, ... [, élémentN]])
la source
.map(Number)
convertit chaque élément en un nombre plutôt que de renvoyer quelque chose comme[3, 2, [4, 1, 3]]
pour chaque élément.Cet appel
vous donne le même résultat que si vous écriviez quelque chose comme ceci:
La fonction de carte appelle la fonction Array avec trois paramètres: valeur de l'élément, index de l'élément et tableau entier. Cet appel à
Array
renvoie votre tableau avec 3 éléments: valeur (nombre0
), index (nombre0
), tableau entier ([0]
).Et ce nouveau tableau est enveloppé dans le tableau d'origine, car vous avez mappé l'élément d'origine (numéro
0
) sur le nouvel élément (tableau de 3 éléments)Remarque: vous pouvez être habitué à n'utiliser que le premier paramètre comme dans
ou en utilisant seulement deux pour obtenir également l'index
Mais vous devez vous rappeler que
map
fournit toujours 3 paramètres que vous ignorez simplement dans votre fonction de rappel. C'est aussi la raison pour laquelle un code comme:Retour
C'est parce que la fonction String ne se soucie que du premier paramètre et ignore les autres paramètres passés. Si vous appelez
vous obtiendrez toujours
la source