Tôi có một mảng thưa thớt có nội dung không được bảo đảm để được chèn vào thứ tự chỉ mục nhưng cần được lặp lại thông qua thứ tự chỉ mục. Để lặp qua một mảng thưa thớt, tôi hiểu rằng bạn cần sử dụng câu lệnh for..in.Tôi nên lặp lại như thế nào trên một mảng thưa thớt trong thứ tự chỉ mục?
Tuy nhiên, theo this article:
Không có gì bảo đảm rằng for ... in sẽ trở lại các chỉ số trong bất kỳ thứ tự cụ thể
Nhưng stackoverflow questions like this gợi ý rằng trong khi đối tượng đơn đặt hàng bất động sản không phải là được đảm bảo, các đơn hàng mảng là:
các thuộc tính đặt hàng trong các đối tượng không được bảo đảm bằng JavaScript, bạn cần sử dụng Arra y.
I tested this trong các phiên bản mới nhất của Chrome, Firefox và IE.
<ol id="items"></ol>
var list = [];
function addItem(index) {
list[index] = { idx : index };
}
var insertOrder = [ 8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15 ];
for (var i = 0; i < 15; i++) {
addItem(insertOrder[i]);
}
for(var item in list) {
$("#items").append("<li>" + list[item].idx + "</li>");
}
Tất cả xuất hiện để tôn vinh thứ tự chỉ số vì vậy tôi có thể tin tưởng này luôn luôn là trường hợp? Nếu không, làm thế nào để tốt nhất có được chúng trong thứ tự chỉ mục?
tôi sẽ không mất mà bạn trích dẫn như là một dấu hiệu cho thấy 'for..in' được bảo đảm với mảng. (Tôi không nói rằng nó không phải là, nhưng dòng đó không thực sự nói rằng nó là). Ngoài ra, có [lý do rất tốt] (http://stackoverflow.com/questions/500504/why-is-using-for-in-with-array-iteration-such-a-bad-idea) để tránh sử dụng ' for..in' với mảng, ngay cả khi đặt hàng hoạt động tốt. – JLRishe
Bạn có thể thấy sự khác biệt ở đây: http://jsfiddle.net/abhitalks/rfe33uxf/ – Abhitalks
c.f. [Câu trả lời này] (http://stackoverflow.com/a/4261096/1945651): _ "Ngoài ra, thứ tự lặp lại không được đảm bảo bởi spec., có nghĩa là nếu bạn muốn" lặp "một đối tượng mảng, với câu lệnh này bạn không thể chắc chắn rằng các thuộc tính (mảng chỉ mục) sẽ được truy cập theo thứ tự số. "_ – JLRishe