web-dev-qa-db-ja.com

配列プロトタイプマップで現在のインデックスを取得するにはどうすればよいですか?

Array.prototype.map.callを使用して、一連のノードリストオブジェクトを配列に格納しています。

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
         }
    }
}

私を正しい方向に向ける助けがあれば大歓迎です!ありがとう

11
ILikeTacos

MDNドキュメント の説明:

コールバックは、要素の値、要素のインデックス、およびトラバースされるArrayオブジェクトの3つの引数で呼び出されます。

そう

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