按值降序对关联数组进行排序

时间:2016-03-02 19:41:06

标签: javascript arrays sorting

我有一个关键数组,键作为字符串。现在我想按值递减排序。

这是预期的结果:

onTouchCancel onTouchEnd onTouchMove onTouchStart

但是:

[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;
    });

1 个答案:

答案 0 :(得分: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

中的说明对这些对象进行排序