web-dev-qa-db-fra.com

JavaScript Array # map: argument d'index

Ma question concerne la méthode map des tableaux en JavaScript.

Vous pouvez lui transmettre une fonction qui prend un second argument, l’index de l’élément actuel du tableau en cours de traitement, mais ... dans quel but? Que se passe-t-il quand vous le faites et quelle est la différence quand vous ne le faites pas?

Pour quoi utiliseriez-vous cette fonctionnalité?

48
Claudio

L'index de l'élément en cours est toujours transmis à la fonction de rappel. La seule différence si vous ne le déclarez pas dans la fonction est que vous ne pouvez pas y accéder par son nom.

Exemple:

[1,2,3].map(function(o, i){
    console.log(i);
    return 0;
});

[1,2,3].map(function(o){
    console.log(arguments[1]); // it's still there
    return 0;
});

Sortie:

0
1
2
0
1
2

Démo: http://jsfiddle.net/Guffa/k4x5vfzj/

92
Guffa

Parfois, l'index de l'élément est important. Par exemple, cette carte remplace chaque deuxième élément par 0:

var a = [1, 2, 3, 4, 5, 6];
var b = a.map(function(el, index) {
    return index % 2 ? 0 : el;
});
console.log(b);

Sortie:

[1, 0, 3, 0, 5, 0]
14
Tim Jansen

Voici une description de la fonction map :

arr.map(callback[, thisArg])

callback
Fonction qui produit un élément du nouveau tableau en prenant trois arguments:

currentValue
L'élément en cours de traitement dans le tableau.

index
Index de l'élément en cours de traitement dans le tableau.

array
La carte de matrice a été appelée.

La fonction map prend une fonction de rappel en tant qu'argument (et non un index en tant qu'argument, comme indiqué à l'origine dans la question avant sa modification). La fonction de rappel a un index en tant que paramètre - le rappel est appelé automatiquement, de sorte que vous ne fournissez pas l'index vous-même. Si vous avez seulement besoin de la valeur actuelle, vous pouvez omettre les autres paramètres.

6
kapex