【问题标题】:How to change the order of a JavaScript object? [closed]如何更改 JavaScript 对象的顺序? [关闭]
【发布时间】:2012-11-17 02:20:34
【问题描述】:

我的 JavaScript 对象如下所示:

"ivrItems": {
  "50b5e7bec90a6f4e19000001": {
    "name": "sdf",
    "key": "555",
    "onSelect": "fsdfsdfsdf"
  },
  "50b5e7c3c90a6f4e19000002": {
    "name": "dfgdf",
    "key": "666",
    "onSelect": "fdgdfgdf",
    "parentId": null
  },
  "50b5e7c8c90a6f4e19000003": {
    "name": "dfdf",
    "key": "55",
    "onSelect": "dfdffffffffff",
    "parentId": null
  }
}

现在我想动态改变对象的顺序。

排序后,对象应如下所示:

"ivrItems": {
  "50b5e7bec90a6f4e19000001": {
    "name": "sdf",
    "key": "555",
    "onSelect": "fsdfsdfsdf"
  },
  "50b5e7c8c90a6f4e19000003": {
    "name": "dfdf",
    "key": "55",
    "onSelect": "dfdffffffffff",
    "parentId": null
  }
  "50b5e7c3c90a6f4e19000002": {
    "name": "dfgdf",
    "key": "666",
    "onSelect": "fdgdfgdf",
    "parentId": null
  }
}

有没有办法做到这一点?

【问题讨论】:

标签: javascript javascript-objects


【解决方案1】:

Javascript 对象本质上是无序的。
你不能那样做。

【讨论】:

  • @Thanks,将上述对象更改为数组的任何想法,键 50b5e7bec90a6f4e19000001,.... 非常重要,在任何给定点我只知道这个键...
【解决方案2】:

您应该使用数组。对象键没有顺序

像这样:

{
    "ivrItems": [
        {
            "id": "50b5e7bec90a6f4e19000001",
            "name": "sdf",
            "key": "555",
            "onSelect": "fsdfsdfsdf"
        },
        {
            "id": "50b5e7c8c90a6f4e19000003",
            "name": "dfdf",
            "key": "55",
            "onSelect": "dfdffffffffff",
            "parentId": null
        },
        {
            "id": "50b5e7c3c90a6f4e19000002",
            "name": "dfgdf",
            "key": "666",
            "onSelect": "fdgdfgdf",
            "parentId": null
        }
    ]
}

【讨论】:

  • “ivrItems”:[“50b5e7bec90a6f4e19000001”:{“name”:“sdf”,“key”:“555”,“onSelect”:“fsdfsdfsdf”},“50b5e7c3c90a6f4e19000002”:{“name " : "dfgdf", "key" : "666", "onSelect" : "fdgdfgdf", "parentId" : null }] 类似这样的东西
  • @GowtGM:不;这是无效的语法。
  • @GowtGM:我在答案中添加了示例。
  • 这里有一个为我完成这项工作的答案:stackoverflow.com/a/16543302/1579667,它说要使用 JSON.stringify() 的第二个参数,并按照您想要的顺序使用一组键名。
【解决方案3】:

要获取然后更改对象枚举的顺序,您需要手动定义顺序。这通常通过将对象的属性添加到数组来完成。

var keys = Object.keys(data.ivrItems);

现在您可以迭代 keys 数组,并使用键访问您的 irvItems 对象的成员。

keys.forEach(function(key) {
    console.log(data.irvItems[key]);
});

现在订单将始终是Object.keys 给出的订单,但不能保证订单就是您想要的。

您可以使用该数组并使用您需要的任何顺序对其重新排序。

keys.sort(function(a, b) {
    return +data.irvItems[a].key - +data.irvItems[b].key;
});

这种排序会在数值转换后按照每个对象的嵌套key属性对键进行排序。

【讨论】:

    【解决方案4】:

    如果您在浏览器中执行此操作,您可能会在跨浏览器兼容性方面遇到困难。但是计算机大多是确定性的,因此您可能可以在一个 javascript 引擎实现中可靠地完成此任务。例如,在 Chrome REPL/console 中,您可以简单地通过排序添加属性来获得此顺序:

    var n = {}
    n.b = 2
    n.c = 3
    var m = {}
    m.c = 3
    m.b = 2
    JSON.stringify(n)
    > "{"b":2,"c":3}"
    JSON.stringify(m)
    > "{"c":3,"b":2}"
    

    因此您可以重构您的对象,按照您以后想要找到它们的顺序添加键。

    但其他人是对的,如果你想要真实的、可预测的顺序,你应该使用数组。

    【讨论】:

      猜你喜欢
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 2020-08-25
      • 2016-09-26
      • 1970-01-01
      • 2013-12-16
      • 1970-01-01
      相关资源
      最近更新 更多