我有以下代码来生成一个简单的哈希数组。
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/