javascript - 在 Javascript 中按值对哈希/数组进行排序

标签 javascript arrays sorting hash

我有以下代码来生成一个简单的哈希数组。

function getRandomArbitrary(min, max) {
    return Math.random() * (max - min) + min;
}
var arr = [];
for (i=0; i<10; i++) {
    var id = 'user-' + Math.floor(getRandomArbitrary(0,1000));
    var xp = Math.floor(getRandomArbitrary(2000,3000));
    arr[id] = ({'xp':xp});
}

现在循环遍历我所做的数组:

for (id in arr) {
    document.write(id + ': ' + arr[id].xp + '<br>');
}

示例结果如下:

user-750: 2085
user-681: 2051
user-790: 2174
user-542: 2537
user-943: 2913
user-678: 2829
user-365: 2398
user-886: 2571
user-635: 2525
user-786: 2482

这将显示所有用户及其 XP。

问题是,如何按 XP(降序)对这个数组进行排序?

我开始于:

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

但这效果并不好。

最佳答案

您无法对其进行排序,因为您没有将该数组用作数组。

数组也是一个对象,这就是为什么您可以使用 "user-750" 这样的键向其中添加项目。然而,这些项目是数组对象中的属性,而不是数组中的项目。当您对数组进行排序时,它只会对项目进行排序,并且数组中没有项目,因此排序不会改变任何内容。

您无法对属性进行排序,因为属性的顺序未定义。如果您尝试按特定顺序添加属性,它们仍将按顺序返回,具体取决于它们内部存储的方式。这是特定于实现的,不同的浏览器实际上会以不同的顺序返回属性。

如果要对数组进行排序,则必须将对象作为项目添加到数组中,而不是作为属性:

arr.push({ id: id, xp: xp });

关于javascript - 在 Javascript 中按值对哈希/数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25338424/

相关文章:

如果一个索引是最后一个倒带数组,则PHP循环两个数组

javascript - 在 javascript 或 angularjs 中解析 url

PHP计算多维数组中的项目

javascript - 如何比较所有类别的数据值?

javascript - 使用 concat 将对象添加到数组的正确方法

python - 根据另一个列表中子字符串的顺序对列表进行排序

java - HashMap 中的插入无法正常工作

c - 许多查找的最佳排序算法

javascript - 单击按钮时如何在另一个页面上显示按钮名称

javascript - 多个请求的axios拦截器刷新 token