【问题标题】:show the results order in angular controller same as it was sent from spring controller在角度控制器中显示与从弹簧控制器发送的结果顺序相同的结果顺序
【发布时间】:2018-02-16 17:07:15
【问题描述】:

我将一个 Map 从 java spring 控制器返回到 angularjs 控制器。 java 控制器中的 Map 包含以下键,按顺序 11,12,14,15,18,22,25,27,34,29 映射到我发送到 js 控制器的值。问题是当我在网页上迭代并显示响应时,它以11,12,14,15,18,22,25,27,29,34 之类的排序方式显示结果。 如何防止这种情况并按照我从 java 控制器(i.e.,11,12,14,15,18,22,25,27,34,29) 发送的顺序显示(请注意最后两个值 34,29 不同)

js代码:

angular.forEach($scope.myResponse, function (value, key) {
    //here the results i get are in the order 11,12,14,15,18,22,25,27,29,34.
    //how to show the results as it was sent from java spring controller 11,12,14,15,18,22,25,27,34,29
});

【问题讨论】:

  • 您能否在开发者工具的网络选项卡中检查并确认您是否按您需要的顺序接收它?
  • 在没有您的默许的情况下,Angular 极不可能代表您进行任何类型的排序。您要返回的地图类型是什么 - HashMapTreeMap?
  • 它是 LinkedHashMap@Makoto

标签: javascript java angularjs spring javascript-objects


【解决方案1】:

如果属性名称可以被解析为整数,Chrome 会对它们进行排序。

来自文档:

对象属性交互顺序错误

ECMA-262 未指定枚举顺序。事实上的标准是匹配 插入顺序,V8 也这样做,但有一个例外:

V8 不保证数组索引的枚举顺序(即属性 可以解析为 32 位无符号整数的名称)。

记住数组索引的插入顺序会产生大量内存 开销。

— Chromium issue #164

为保证顺序,请将数据作为键/值对数组发送。

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 2017-01-10
    • 2013-11-06
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    相关资源
    最近更新 更多