javascript - 迭代 JSON 对象

标签 javascript html angularjs arrays json

我想迭代 json 对象transactionByFop

HTML

<div ng-show="searhController.orderCAT.results.length" ng-repeat="(key,obj) in searhController.orderCAT.results track by $index">
            <dl style="border: 1px;"  ng-repeat="(keySub, resp) in obj">
                <dt>{{keySub}}</dt>
                <dd>{{resp}}</dd>
            </dl>
            </div>

JSON

[{
"lastUpdate": "2015-04-06 12:19:20.902",
"orderId": "83642465",
"idFop": 1,
"transactionByFop": {
    "idTransactionByFop": 1523280,
    "Binnacle": {
        "tbkIdTransaction": 8333514670,
        "ackType": "ACK",
        "tbkOrderBuy": 1523280,
        "tbkCodeCommerce": 123123,
        "tbkTypeTransaction": "TR_NORMAL",
        "tbkResponse": -1,
        "tbkAmount": 3.7298E7,
        "tbkCodeAuthorization": 0,
        "tbkFinalNumberCard": "213123",
        "tbkAccountantDate": "0406",
        "tbkTransactionDate": "0406",
        "tbkTransactionHour": "121830",
        "tbkIdSession": 1523280,
        "tbkTypePayment": "VN",
        "tbkNumberFee": 0
    }
},
"isLast": true}]

最佳答案

您想要展平您的嵌套对象。您可以执行以下操作(基于 this thread 的答案)。

创建一个函数来压平您的对象

$scope.flattenResults = function(data) {
  var result = {};

  function recurse(cur, prop) {
    if (Object(cur) !== cur) {
      result[prop] = cur;
    } else if (Array.isArray(cur)) {
      for (var i = 0, l = cur.length; i < l; i++)
        recurse(cur[i], prop + "[" + i + "]");
      if (l == 0)
        result[prop] = [];
    } else {
      var isEmpty = true;
      for (var p in cur) {
        isEmpty = false;
        recurse(cur[p], prop ? prop + "." + p : p);
      }
      if (isEmpty && prop)
        result[prop] = {};
    }
  }
  recurse(data, "");
  return result;
};

在你的 ng-repeat 中使用它

<dl style="border: 1px;" ng-repeat="(keySub, resp) in flattenResults(obj)">

请参阅下面的工作示例 -

var searchapp = angular.module('searchapp', [])
  .controller('searchController', function($scope) {
    $scope.results = [{
      "lastUpdate": "2015-04-06 12:19:20.902",
      "orderId": "83642465",
      "idFop": 1,
      "transactionByFop": {
        "idTransactionByFop": 1523280,
        "Binnacle": {
          "tbkIdTransaction": 8333514670,
          "ackType": "ACK",
          "tbkOrderBuy": 1523280,
          "tbkCodeCommerce": 123123,
          "tbkTypeTransaction": "TR_NORMAL",
          "tbkResponse": -1,
          "tbkAmount": 3.7298E7,
          "tbkCodeAuthorization": 0,
          "tbkFinalNumberCard": "213123",
          "tbkAccountantDate": "0406",
          "tbkTransactionDate": "0406",
          "tbkTransactionHour": "121830",
          "tbkIdSession": 1523280,
          "tbkTypePayment": "VN",
          "tbkNumberFee": 0
        }
      },
      "isLast": true
    }];

    $scope.flattenResults = function(data) {
      var result = {};

      function recurse(cur, prop) {
        if (Object(cur) !== cur) {
          result[prop] = cur;
        } else if (Array.isArray(cur)) {
          for (var i = 0, l = cur.length; i < l; i++)
            recurse(cur[i], prop + "[" + i + "]");
          if (l == 0)
            result[prop] = [];
        } else {
          var isEmpty = true;
          for (var p in cur) {
            isEmpty = false;
            recurse(cur[p], prop ? prop + "." + p : p);
          }
          if (isEmpty && prop)
            result[prop] = {};
        }
      }
      recurse(data, "");
      return result;
    };
  });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="searchapp" ng-controller="searchController">
  <div ng-show="results.length" ng-repeat="(key,obj) in results track by $index">
    <dl style="border: 1px;" ng-repeat="(keySub, resp) in flattenResults(obj)">
      <dt>{{keySub}}</dt>
      <dd>{{resp}}</dd>
    </dl>
  </div>
</div>

关于javascript - 迭代 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40384581/

相关文章:

javascript - 从 javascript 数组中的每个单词中查找匹配的字母

html - 文件不会显示在文件夹中,但会显示在根目录中?

javascript - 检查 JS 对象是否匹配值的最佳方法

javascript - 是否可以执行 "if .. || if .."?

javascript - 绝对位置元素,因此它们的行为就像它们是 float 的

php - 显示上传/POST 之前从文件加载的图像

javascript - 正则表达式 Camel 化字符串中的特定文本

javascript - 在浏览器中预加载图像以在服务器断开连接后显示

javascript - 在 html 标签上声明 ng-app 和 ng-controller 不好吗?

javascript - JQuery-UI 侧边菜单悬停区域太宽