我有一个已经按下划线分组的组对象,对象正好是我喜欢它的订购方式。但是当我在页面中输出组对象时,顺序是错误的。
看小提琴: http://jsfiddle.net/pbxaD/44/
$scope.groups = {"Day 1":[{"category":"Flight"},{"category":"Others"}],"Day 2":[{"category":"Train"}],"Day 3":[{"category":"Flight"}],"Day 18":[{"category":"Car"}],"undefined":[{"category":"Flight"}]};
正确的应该是:第1天,第2天,第3天,第18天,未定义 但输出正在变为:第1天,第18天,第2天,第3天,未定义
有什么建议吗?
答案 0 :(得分:1)
与数组不同,javascript中的对象不是有序的。如果你想保持目前的数据结构,最好的办法是编写一个自定义过滤器,如Dmitri Algazin评论。如果您可以稍微改变结构,请检查以下小提琴:
https://jsfiddle.net/pbxaD/47/
$scope.groups = [
{
day: "Day 1",
categories:["Flight","Others"]
},
{
day: "Day 2",
categories: ["Train"]
}, // etc
]
答案 1 :(得分:1)
这是版本1.2和版本的angularjs
默认行为。 1.3。但是,角度1.4中已删除此行为。
我使用angular 1.4更新了作为外部资源的链接,它正如您所希望的那样工作
答案 2 :(得分:1)
默认情况下,javascript对象键检索为升序。在你的情况下订购它比较两个字符串。因此字符串比较'b'
明显大于'ab'
。所以在你的情况下,'Day 18'
实际上小于'Day 2'
。这就是为什么'第18天'在第2天'之前来临。
在这里,您可以看到字符串比较规范click here
您可以使用自定义过滤器来更改订单。