angularjs 扰乱了 json 结构

angularjs disturbs json structure

我按以下顺序从服务器端获取 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 sorting by property

Javascript "objects" 没有 "order" 这样的东西 - 如果你说

{ "e": 0, "b": 123, "c": 345"...

它不会被枚举为 e、b、c,因为它是在文字中设置的 - 枚举的结果将只是 b、c、e ...(按字母顺序)。

为了正确枚举,您必须将订单存储在其他实体中(例如数组 ["e"、"b"、"c"])

我想你尝试使用 arr.sort,但不能保证。

The sort() method sorts the elements of an array in place and returns the array. The sort is not necessarily stable. The default sort order is according to string Unicode code points.

如果未提供 compareFunction,则通过将元素转换为字符串并按 Unicode 代码点顺序比较字符串来对元素进行排序。例如,"Cherry" 在 "banana" 之前。在数字排序中,9 在 80 之前,但是因为数字被转换为字符串,所以“80”在 Unicode 顺序中在“9”之前。

Array.prototype.sort()

我认为最好的解决方案是响应按您想要的顺序出现。

示例:

[0: { ITEM }, 1 : {ITEM 2}]

或者创建一个比较函数:

items.sort(function (a, b) {
  return a.localeCompare(b);
});

More details .. , 见参考资料

我找到了解决这个问题的方法:

<td ng-repeat="key in objectKeys(outletFieldAttrsList[0])"> </td>

和控制器端:

$scope.objectKeys = function (obj) {
           
        return Object.keys(obj);
    }

Object.keys returns 该对象的键与它们存在时的顺序相同。