2014-10-14 12 views
47

La mia domanda riguarda il metodo map di array in JavaScript.JavaScript # Array map: index argument

È possibile passarlo una funzione che accetta un secondo argomento, l'indice dell'elemento corrente dell'array in elaborazione, ma ... a quale scopo? Cosa succede quando lo fai e qual è la differenza quando non lo fai?

Per che cosa utilizzeresti questa funzione?

+0

dalla mappa che si vuol dire JavaScript Object? la mente fornisce un esempio? – Steve

risposta

89

L'indice della voce corrente è sempre passato alla funzione di callback, l'unica differenza, se non lo fai dichiararlo nella funzione è che non è possibile accedervi per nome.

Esempio:

[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; 
}); 

uscita:

0 
1 
2 
0 
1 
2 

Demo: http://jsfiddle.net/Guffa/k4x5vfzj/

6

Ecco una descrizione della funzione map:

arr.map(callback[, thisArg]) 

callback
funzione che produce un elemento del nuovo array, prendendo tre argomenti

currentValue
I elemento corrente in elaborazione nell'array.

index
L'indice dell'elemento corrente in elaborazione nell'array.

array
La mappa di matrice è stata chiamata.

La funzione map richiede una funzione di callback come argomento (e non un indice come argomento, come originariamente indicato nella domanda prima è stato modificato). La funzione di callback ha un indice come parametro - la richiamata viene chiamata automaticamente, quindi non fornisci tu stesso l'indice. Se hai solo bisogno del valore corrente, puoi omettere gli altri parametri.

12

A volte l'indice dell'elemento è importante. Ad esempio, questa mappa sostituisce ogni secondo elemento con 0:

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

uscita:

[1, 0, 3, 0, 5, 0]