【问题标题】:Javascript - create flat sorted object from an object [duplicate]Javascript - 从对象创建平面排序对象[重复]
【发布时间】: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:

http://jsfiddle.net/Tj39A/

【问题讨论】:

  • 抱歉,maxSpeed 不是 Array 而是 Object
  • 对象内部使用哈希算法来存储密钥。所以,我们不能明确地对它们进行排序。
  • @PaulS。这是PHP 开发人员对JavaScript 的常见错误
  • 抱歉,我的错,我的意思当然是对象而不是数组 :) @Bergi,即使那是重复的,我使用的是原始问题中最受好评的答案,它似乎没有按预期工作(它修改了原始数组并使其成为多维数组)。
  • 尝试像这样存储您的数据:var maxSpeed = [{ vehicle : 'car', speed : 300 }, ...];。你有一个数组中的对象,你可以对它们进行排序。

标签: javascript arrays sorting object


【解决方案1】:

你正在寻找的是这样的:

rv[sortable[i][0]] = sortable[i][1];

然而,正如已经指出的那样,一个对象不能按照你想要的方式排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 2016-12-26
    • 2021-02-12
    相关资源
    最近更新 更多