我按以下顺序从服务器端获取一个 json:
[{
"outlet_id": 83
"outlet_name": "My Outlet"
"address": "My Outlet"
"shop_number": "123"
"street": "123"
"building_no": "52"
"key_location": "Location 123"
"mohallah": "Mohalla 123"
"landline": "1235869"
"owner_name": "Owner"
"Manufecture": "A"
"BrandName": "B"
"Variant": "C"
"BRANDDiscription": "D"
"SIZE": "E"
"Variant/Promotions": null
"Segment": null
}]
但是当我显示它时,它会扰乱秩序,我使用 ng-repeat,如下所示:
<td ng-repeat="(key, value) in vm.outletFieldAttrsList[0]">{{value}}</td>
属性的顺序与服务器返回的JSON中的顺序不同,有人可以提供帮助吗?
JavaScript 中对象属性的顺序无法保证。为此,您需要使用数组或映射。
相关:
按属性排序的 AngularJS
Javascript"对象"没有"订单"这样的东西 - 如果你有说
{"e": 0,"b": 123,"C": 345"...
它不会被枚举为 E、B、C,因为它是在文字中设置的 - 枚举的结果将简单地是 b、c、e ...(按字母表)。
为了正确枚举,您必须将顺序存储在其他实体中(如数组 ["e"、"b"、"c"])
你尝试使用arr.sort,但不能保证。
sort() 方法对数组的元素进行就地排序并返回 数组。排序不一定稳定。默认排序顺序 是根据字符串 Unicode 码位。
如果未提供 compareFunction,则通过将元素转换为字符串并按 Unicode 代码点顺序比较字符串来对元素进行排序。例如,"樱桃"在"香蕉"之前。在数字排序中,9 在 80 之前,但由于数字转换为字符串,因此 "80" 按 Unicode 顺序排在"9"之前。
Array.prototype.sort()
我相信最好的解决方案,那就是响应按照您想要的顺序出现。
例:
[0: { ITEM }, 1 : {ITEM 2}]
或者创建一个函数兼容:
items.sort(function (a, b) {
return a.localeCompare(b);
});
更多详细信息..,请参阅参考资料
我找到了这个问题的解决方案:
<td ng-repeat="key in objectKeys(outletFieldAttrsList[0])"> </td>
和控制器端:
$scope.objectKeys = function (obj) {
return Object.keys(obj);
}
Object.keys 以与存在的顺序相同的顺序返回该对象的键。