2013-11-15 9 views
8

Sto usando Array.prototype.map.call per memorizzare in un array un gruppo di nodo oggetti lista:Come ottenere l'indice corrente nella mappa del prototipo di array?

function getListings() { 
    return Array.prototype.map.call(document.querySelectorAll('li.g'), function(e) { 
     return { 
      rectangle: e.getBoundingClientRect(); 
     } 
    } 
} 

Tuttavia, ho anche voglia di memorizzare l'ordine in cui questi elementi appaiono nel DOM, e non so come farlo.

So che sto memorizzando questo in un array, e l'ordine sarebbe l'indice dell'array. Per esempio:

var listings = getListings(); 
console.log(listings[0]); // rank #1 
console.log(listings[1]); // rank #2 
// etc... 

ma sto inserendo l'oggetto JSON in un database, e il modo più semplice per memorizzare le informazioni "rango" è attraverso la creazione di una proprietà "rango" nel mio oggetto, ma non lo faccio sapere come ottenere "l'indice" dell'array attuale.

Qualcosa di simile:

function getListings() { 
    return Array.prototype.map.call(document.querySelectorAll('li.g'), function(e) { 
     return { 
      rectangle: e.getBoundingClientRect(), 
      rank: magicFunctionThatReturnsCurrentIndex() // <-- magic happens 
     } 
    } 
} 

Qualsiasi aiuto mi indica la direzione giusta sarà molto apprezzato! Grazie

+0

penso 'document.querySelectorAll ('li.g')' dovrebbe restituire gli elementi a destra nell'ordine corretto, vale a dire il modo in cui appaiono in DOM. – VisioN

+0

Sì, ma esiste un modo per ottenere il valore numerico? Ho gli elementi nell'ordine corrente, ma voglio avere un attributo nel mio oggetto JSON con il suo valore numerico. – ILikeTacos

risposta

20

Il MDN documentation dice:

callback viene richiamata con tre argomenti: il valore dell'elemento, l'indice dell'elemento, e l'oggetto Array essendo attraversato.

Così

function getListings() { 
    return Array.prototype.map.call(document.querySelectorAll('li.g'), function(e, rank) { // magic 
     return { 
      rectangle: e.getBoundingClientRect(), 
      rank: rank // <-- magic happens 
     } 
    } 
} 
+2

Ho letto quella pagina più e più volte, e per qualche ragione non ho mai notato che anche l'indice veniva passato. Grazie! – ILikeTacos