2013-11-15 59 views
8

Tôi đang sử dụng Array.prototype.map.call để lưu trữ trong một mảng một loạt các đối tượng danh sách nút:Làm cách nào để lấy chỉ mục hiện tại trong bản đồ nguyên mẫu Array?

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

Tuy nhiên, tôi cũng muốn để lưu trữ các thứ tự trong đó các yếu tố này xuất hiện trong DOM, và tôi không biết làm thế nào để làm điều đó.

Tôi biết rằng tôi đang lưu trữ điều này trong một mảng và thứ tự sẽ là chỉ mục của mảng. Ví dụ:

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

nhưng tôi chèn đối tượng json vào cơ sở dữ liệu và cách dễ nhất để lưu trữ thông tin "xếp hạng" là tạo thuộc tính "xếp hạng" trong đối tượng của tôi, nhưng tôi không biết cách lấy "chỉ mục" của mảng hiện tại.

Cái gì như:

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

Bất kỳ sự giúp đỡ chỉ cho tôi để đi đúng hướng sẽ được đánh giá cao! Cảm ơn

+0

Tôi nghĩ 'document.querySelectorAll ('li.g') 'nên trả lại các yếu tố đúng theo đúng thứ tự, ví dụ: làm thế nào họ xuất hiện trong DOM. – VisioN

+0

Có, nhưng có cách nào để lấy giá trị bằng số không? Tôi có các phần tử theo thứ tự hiện tại, nhưng tôi muốn có một thuộc tính trong đối tượng JSON của tôi với giá trị bằng số của nó. – ILikeTacos

Trả lời

20

Các MDN documentation nói:

callback được gọi với ba đối số: giá trị của nguyên tố này, chỉ số của phần tử, và các đối tượng Array được đi qua.

Vì vậy

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

Tôi đọc trang đó hơn và hơn, và vì lý do gì tôi không bao giờ nhận thấy rằng chỉ số cũng đã được thông qua. Cảm ơn! – ILikeTacos

Các vấn đề liên quan