簡體   English   中英

反向循環關聯數組

[英]Loop through associative array in reverse

我正在使用 javascript 關聯數組 (arr) 並使用此方法循環遍歷它。

for(var i in arr) {
    var value = arr[i];
    alert(i =") "+ value);
}

問題是項目的順序對我來說很重要,它需要從最后到第一個循環,而不是像目前那樣從第一個到最后一個。

有沒有辦法做到這一點?

四件事:

  1. JavaScript 有數組(整數索引 [見下面的評論])和對象(字符串索引)。 在另一種語言中你稱之為關聯數組的東西在 JS 中被稱為對象。

  2. 不應該使用for in循環遍歷 JS 數組

  3. 如果您正在遍歷一個對象,請使用: hasOwnProperty

  4. JavaScript 不保證對象中鍵的順序。 如果您關心順序,請改用數組。

如果您使用的是普通數組,請執行以下操作:

for (var i = arr.length - 1; i >= 0; i--) {
    //do something with arr[i]
}

警告:這個答案很古老。

如果您是為了快速解決問題,請參考下面更好的答案

原答案保留,原因。 見評論。


使用以相反順序保存鍵的臨時數組:

var keys = new Array();

for (var k in arr) {
    keys.unshift(k);
}

for (var c = keys.length, n = 0; n < c; n++) {
   alert(arr[keys[n]]);
}

對於普通數組,我會這樣做:

var i = arr.length;
while (i--) {
    var value = arr[i];
    alert(i =") "+ value);
}

這比“for”循環快。

http://blogs.oracle.com/greimer/entry/best_way_to_code_a

在現代瀏覽器中,您現在可以使用Object.keys來獲取屬性數組並以相反的順序逐步遍歷它,從而跳過初步的密鑰收集循環。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

var keys = Object.keys(subject);
for (var i = keys.length-1; i >= 0; i--) {
    var k = keys[i],
        v = subject[k];
    console.log(k+":",v);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM