2013-11-15 15 views
8

私は、アレイ内のノードリストオブジェクトの束を保存するためにArray.prototype.map.callを使用しています:Arrayプロトタイプマップで現在のインデックスを取得するには?

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

はしかし、私はまた、この要素は、DOMに表示される順序を保存したいです、私はそれをする方法を知らない。

私はこれを配列に格納していることを知っています。順序は配列のインデックスになります。たとえば、次のように

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

が、私は、データベース内のJSONオブジェクトを挿入していて、「ランク」の情報を格納するための最も簡単な方法は、私のオブジェクトのプロパティ「ランク」を作成することですが、私はしないでください現在の配列の "インデックス"を取得する方法を知っている。以下のような

何か:正しい方向に私を指して

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

すべてのヘルプは大歓迎されます!おかげ

+0

私は 'document.querySelectorAll( 'li.g')は'彼らはDOMに表示される、すなわちどのように、右の正しい順序で要素を返すべきだと思います。 – VisioN

+0

はい、それはありますが、数値を得る方法はありますか?私は現在の順序で要素を持っていますが、私はJSONオブジェクトの中にその数値を持つ属性を持たせたいと思います。 – ILikeTacos

答えて

20

MDN documentationは言う:

コールバックは三つの引数で呼び出される:要素の値は、 要素のインデックス、およびArrayオブジェクトを横断しています。

ので

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

私はそのページを何度も何度も読んでいましたが、何らかの理由でインデックスが渡されたことに気付かなかったのです。ありがとう! – ILikeTacos

関連する問題