AngularJS会干扰JSON结构



我按以下顺序从服务器端获取一个 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 以与存在的顺序相同的顺序返回该对象的键。

最新更新