我的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
}
}
有没有办法做到这一点?
答案 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}"
所以你可以重建你的对象,按照你想要的顺序添加键。
但是其他人是对的,如果你想要真实的,可预测的顺序,你应该使用数组。