Javascript 按值降序对关联数组排序

Javascript 按值降序对关联数组排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个以键为字符串的关联数组。现在我想按值降序对它们进行排序 这是预期的结果: [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; }); 我得到了最初的订单: [app

我有一个以键为字符串的关联数组。现在我想按值降序对它们进行排序

这是预期的结果:

[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]

在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}
];

然后,您将能够按照

中的说明对这些对象进行排序,正如Oriol所说,您将数组视为一个对象。除了少数例外,对字符串使用方括号表示法而不是索引只是在对象上定义命名属性的一种方法。如果需要根据属性名按顺序检索值,可以使用、排序和循环访问值。在第3个示例中,哪种括号是正确的?不,您在第3个示例的末尾使用了[开头,但}。抱歉,这是一个输入错误。