2011-08-20 102 views
1

我有5個變量:a,b,c,de,它們的值取決於用戶輸入。現在我想按降序對這些變量進行排序,然後打印出來。例如,我有以下值:根據變量值對變量進行排序然後打印它們

a = 1, b = 1.5, c = 1, d = 3, e = 2 

我想打印像這樣的列表:

d = 3 
e = 2 
b = 1.5 
a = 1 
c = 1 

我試圖做到這一點使用關聯數組,但我失敗了,因爲它沒有索引。你能幫我解決這個問題嗎?

回答

2

嘛,像

var vars = {a: 1, b: 1.5, c: 1, d: 3, e: 2}, keys = Object.keys(vars); 
keys.sort(function (a, b) { 
    return vars[b] - vars[a]; 
}); 
keys.forEach(function (key) { 
    console.log(key + ' = ' + vars[key]); 
}); 

似乎很好地勝任。請注意,這裏使用ES5 Object.keys,這是不是在一些瀏覽器的支持,所以如果你希望它在Opera和IE < 9運行,你必須做一些像

if (typeof Object.keys !== 'function') { 
    Object.keys = function (obj) { 
     var keys = [], i; 
     for (i in obj) { 
      if (obj.hasOwnProperty(i)) { 
       keys.push(i); 
      } 
     } 
     return keys; 
    }; 
} 

哦,它也使用ES5的forEach,所以如果你需要使用IE < 9工作,你必須做一些像

if (typeof Array.prototype.forEach !== 'function') { 
    Array.prototype.forEach = function (func) { 
     for (var i = 0, l = this.length; i < l; i += 1) { 
      func(this[i], i); 
     } 
    }; 
} 
+0

這工作得很好。謝謝:) –

+0

@ Eng.Fouad:沒問題。 :) –

0

使用:arr = [ [ "a", 1 ], [ "b", 1.5 ], ... ]sort該數組具有自定義排序功能,該功能僅使用每個值中的第二項。

相關問題