2013-11-15 21 views
8

Używam Array.prototype.map.call przechowywać w tablicy kilka węzłów lista obiektów:Jak uzyskać aktualny indeks w mapie prototypowej Array?

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

Jednak chciałbym również przechowywać w jakiej kolejności to elementy pojawiają się w DOM, i nie wiem, jak to zrobić.

Wiem, że przechowuję to w tablicy, a kolejność będzie indeksem tablicy. Na przykład:

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

ale jestem wstawienie obiektu json w bazie danych, i najprostszy sposób do przechowywania „rangi” informacji jest tworzenie właściwość „rangę” W mojej obiektu, ale nie wiem wiedzieć, jak uzyskać "indeks" bieżącej tablicy.

Coś jak:

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

Każda pomoc wskazujące mnie we właściwym kierunku, będą bardzo mile widziane! Dzięki

+0

myślę 'document.querySelectorAll ('li.g')' powinien powrócić elementy prawo we właściwej kolejności, to znaczy, jak pojawiają się one w DOM. – VisioN

+0

Tak, ale czy istnieje sposób na uzyskanie wartości liczbowej? Mam elementy w aktualnej kolejności, ale chcę mieć atrybut w moim obiekcie JSON z jego wartością liczbową. – ILikeTacos

Odpowiedz

20

The MDN documentation mówi:

zwrotna jest wywoływana z trzema argumentami: wartością elementu, indeks elementu, a obiekt Array przejeżdżającego.

Więc

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

Czytam tę stronę w kółko iz jakiegoś powodu nigdy nie zauważyłem, że indeks został również przekazany. Dzięki! – ILikeTacos