【发布时间】:2014-05-13 13:09:27
【问题描述】:
我有一个数组:
var maxSpeed = {car:300, bike:60, motorbike:200, airplane:1000, helicopter:400, rocket:8*60*60}
我想对其进行排序并转换为看起来与上面的数组完全相同的 FLAT 对象。不幸的是,在排序和创建对象后,我得到了多维对象:
var sortable = [];
for (var vehicle in maxSpeed)
sortable.push([vehicle, maxSpeed[vehicle]])
sortable.sort(function(a, b) {return a[1] - b[1]});
function toObject(sortable) {
var rv = {};
for (var i = 0; i < sortable.length; ++i)
rv[i] = sortable[i];
return rv;
}
检查console.logs,一个是嵌套的,另一个不是。我想我必须修改 rv[i] = sortable[i] 行,但我不确定如何?
这就是我现在得到的:
Object
0: Array[2]
1: Array[2]
2: Array[2]
3: Array[2]
4: Array[2]
5: Array[2]
__proto__: Object
以及我想要得到的:
Object
airplane: 1000
bike: 60
car: 300
helicopter: 400
motorbike: 200
rocket: 28800
__proto__: Object
JSFiddle:
【问题讨论】:
-
抱歉,
maxSpeed不是 Array 而是 Object -
对象内部使用哈希算法来存储密钥。所以,我们不能明确地对它们进行排序。
-
@PaulS。这是
PHP开发人员对JavaScript的常见错误 -
抱歉,我的错,我的意思当然是对象而不是数组 :) @Bergi,即使那是重复的,我使用的是原始问题中最受好评的答案,它似乎没有按预期工作(它修改了原始数组并使其成为多维数组)。
-
尝试像这样存储您的数据:
var maxSpeed = [{ vehicle : 'car', speed : 300 }, ...];。你有一个数组中的对象,你可以对它们进行排序。
标签: javascript arrays sorting object