我有一个json对象。它不按升序排序。
$scope.myData = {
"MAX" : "some value",
"Forms" : "some value",
"Grids And Tables" : "some value",
"Navigation" : "some value",
"Services & APIs" : "some value"
}
我使用ng-repeat在我的html模板中显示它。我得到了结果,但订单已按升序改变。
Forms
Grids And Tables
MAX
Navigation
Services & APIs
如何防止角度js自动排序?
选中此link
答案 0 :(得分:9)
根据建议,无法对对象键进行排序。购买可以对使用这些对象键创建的数组进行排序 -
$scope.keys = Object.keys($scope.myData);
<ul>
<li ng-repeat="key in keys">
{{key}} -
{{myData[key]}}
</li>
</ul>
答案 1 :(得分:2)
在javascript中迭代对象键的顺序在技术上是未定义的。虽然大多数浏览器将按定义的顺序迭代对象,但您不应该依赖此行为。
在有角度的情况下,ng-repeat
需要始终对键进行排序,以便即使在事后添加键也可以确定顺序。无法更改此行为,因为它会在动态添加或删除键时中断指令。
如果您需要依赖数据的排序,那么对象哈希就不是正确的数据结构。您应该将数据重新格式化为数组,或者只是按键的顺序创建一个单独的数组,并对其进行重复操作。使用键索引对象。
答案 2 :(得分:0)
您必须手动命名您的密钥,如1,2,3,4,5然后在前端用string.slice(1)切片。希望它有所帮助。