2013-03-12 74 views
1

我在JavaScript中有下列關聯數組...排序一個Javascript數組

opt_array["wta"] = 23; 
opt_array["cdp"] = 54; 
opt_array["cdm"] = 54; 
opt_array["ppv"] = 44; 

我需要的價值排序(遞減),然後用鑰匙(按照特定的順序)。因此,例如在上面,我需要輸出54,54,44,23,並且如果有平局,則按這個順序輸入密鑰。 wta,cdp,cdm,ppv。您沒有使用opt_array作爲數組

所以返回的數組將是...

opt_array["cdp"] = 54; 
opt_array["cdm"] = 54; 
opt_array["ppv"] = 44; 
opt_array["wta"] = 23; 

感謝

+2

這實際上是一個對象,而不是一個數組 – 2013-03-12 16:13:18

回答

7

,你使用它作爲一個對象。

對象的屬性在JavaScript中是無序的,不能以任何特定順序放置它們。

唯一的時間順序似乎是當你使用數組作爲數組和使用數組「索引」,這是數字字符串。 (是的,really。雖然我們經常把它們寫數字,它們實際上是屬性名和屬性名始終爲字符串)。

您可以從您的opt_array的所有屬性名作爲一個數組,然後對它們進行排序,然後循環,產生輸出。例如:

var index; 
var names = Object.keys(opt_array); 
names.sort(); 
for (index = 0; index < names.length; ++index) { 
    console.log(names[index] + ": " + opt_array[names[index]]); 
} 

(使用Object.keys,這是一個ES5功能沒有出現在所有的瀏覽器,您可以勻它早期的瀏覽器。)

或者,如果你喜歡,你可以有數組對象,並且由一個屬性排序的數組對這些對象:

opt_array = [ 
    {key: "wta", value: 23}, 
    {key: "cdp", value: 54}, 
    {key: "cdm", value: 54}, 
    {key: "ppv", value: 44} 
]; 
opt_array.sort(function(a, b) { 
    var rv; 

    if (a.key < b.key) { 
     rv = -1; 
    } 
    else if (a.key > b.key) { 
     rv = 1; 
    } 
    else { 
     rv = 0; 
    } 
    return rv; 
}); 

但是,這可能不是什麼你使用opt_array有用。

3

JavaScript中沒有這樣的關聯數組。你在那裏有一個對象。

對象沒有順序。無論您設置密鑰的順序如何,它都會按照它認爲合適的方式安排它們。因此,你不能對它們進行排序。

+0

好吧,我該如何轉換爲一個數組,然後排序? – Brian 2013-03-12 16:16:37

+0

並非完全如此。幾乎所有的瀏覽器實現都會按照它們添加的順序來保持「順序」(就像你在進入時那樣),所以我想你可以創建一個新的「排序」對象文字。 – 2013-03-12 16:16:37

+0

@Brian你必須放棄字符串鍵並使用'opt_array [0]'等等。 – 2013-03-12 16:17:51

0

您可以通過使用Object.keys

var sortedKeys = Object.keys(opt_array).sort(); 

for(var i = 0; i < sortedKeys.length; i++){ 
    console.log("opt_array['" + sortedKeys[i] +"'] = "+ opt_array[sortedKeys[i]]+ ";"); 
} 

輸出得到整理的按鍵陣列:

opt_array['cdm'] = 54; 
opt_array['cdp'] = 54; 
opt_array['ppv'] = 44; 
opt_array['wta'] = 23;