gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 13:30:33 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com