ng重复组错误排序

时间:2015-06-01 10:30:45

标签: angularjs group-by angularjs-ng-repeat ng-repeat

我有一个已经按下划线分组的组对象,对象正好是我喜欢它的订购方式。但是当我在页面中输出组对象时,顺序是错误的。

看小提琴: 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天,未定义

有什么建议吗?

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更新了作为外部资源的链接,它正如您所希望的那样工作

http://jsfiddle.net/pbxaD/48/

答案 2 :(得分:1)

默认情况下,javascript对象键检索为升序。在你的情况下订购它比较两个字符串。因此字符串比较'b'明显大于'ab'。所以在你的情况下,'Day 18'实际上小于'Day 2'。这就是为什么'第18天'在第2天'之前来临。 在这里,您可以看到字符串比较规范click here

您可以使用自定义过滤器来更改订单。