2016-03-02 195 views
-1

我有一個關鍵字作爲字符串的關聯數組。現在我想按價值降序對它們進行排序。按值降序排列關聯數組

這是預期的結果:

[orange: 3, apple: 2, banana: 1] 

但隨着:

var arr = []; 
    arr["apple"] = 2; 
    arr["orange"] = 3; 
    arr["banana"] = 1; 

    arr.sort(function(a,b) { 
     return a.val - b.val; 
    }); 

我得到了最初的訂單:

[apple: 2, orange: 3, banana: 1] 
+0

解釋作爲奧里奧爾說,你處理數組作爲一個對象。除了少數例外,[JavaScript中的所有內容都像對象一樣](http://bonsaiden.github.io/JavaScript-Garden/#object.general),並且使用帶括號的方括號表示而不是索引來定義方法在對象上命名屬性。如果您需要根據其屬性名稱的順序檢索值,則可以使用['Object.keys'集合](https://developer.mozilla.org/en-US/docs/Web/JavaScript/ Reference/Global_Objects/Object/keys),對其進行排序並循環訪問您的值。 – Thriggle

回答

0

在JS,數組的鍵應該是非負整數。

如果使用其他鍵,你是治療陣列作爲一個普通的對象,而不是作爲數組:

var arr = []; 
arr.apple = 2; 
arr.length; // 0 -- array methods will ignore your property 

由於不使用陣列的特殊行爲,應使用一個普通的對象,而不是:

var arr = { 
    apple: 2, 
    orange: 3, 
    banana: 1 
}; 

但是,對象的屬性沒有排序。所以排序他們沒有意義。

要繞過此限制,您可以使用一組對象,例如,

var arr = [ 
    {key: "apple", value: 2}, 
    {key: "orange", value: 3}, 
    {key: "banana", value: 1} 
]; 

然後你就可以將這些對象進行排序,如Sort array of objects by string property value in JavaScript

+0

第三個例子中哪一種支架是正確的? – user1170330

+0

不,你在開始時使用過,但是在第三個例子的末尾。 – user1170330

+0

對不起,這是一個錯字。 – Oriol