重复组错序

ng repeat groups misordered

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

参见fiddle: 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"}]};

正确的应该是:Day 1, Day 2, Day 3, Day 18, undefined 但输出变为:第 1 天、第 18 天、第 2 天、第 3 天,未定义

有什么建议吗?

javascript 中的对象与数组不同,没有排序。如果您想保持目前的数据结构,最好的办法是像 Dmitri Algazin 评论的那样编写一个自定义过滤器。如果您可以处理结构的轻微变化,请检查以下 fiddle:

https://jsfiddle.net/pbxaD/47/

$scope.groups = [
    {
        day: "Day 1",
        categories:["Flight","Others"]
    },
    {
        day: "Day 2",
        categories: ["Train"]
    }, // etc
]

这是 angularjs 版本 1.2 和 1.3 的默认行为。但是,此行为已在 angular 1.4.

中删除

我用 angular 1.4 更新了 link 作为外部资源,它如您所愿地工作

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

默认情况下 javascript 对象键按升序检索。在您订购比较两个字符串的情况下。所以字符串比较 'b' 明显大于 'ab'。所以在你的情况下 'Day 18' 实际上少于 'Day 2'。这就是 'Day 18' 出现在 'Day 2' 之前的原因。 这是你可以看到的字符串比较规范 click here

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