2016-03-02 194 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