如何更改JavaScript对象的顺序?

时间:2012-11-29 03:50:01

标签: javascript javascript-objects

我的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
  }
}

有没有办法做到这一点?

4 个答案:

答案 0 :(得分:3)

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

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属性对键进行排序。

答案 1 :(得分:2)

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

答案 2 :(得分: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
        }
    ]
}

答案 3 :(得分:0)

如果你在浏览器中这样做,你可能会遇到跨浏览器兼容性的困难时期。但计算机主要是确定性的,所以你可以在一个javascript引擎实现中可靠地实现这一点。例如,在Chrome REPL /控制台中,只需添加属性序列即可获得此订单:

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}"

所以你可以重建你的对象,按照你想要的顺序添加键。

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