javascript - AngularJS 重复动态数组值

标签 javascript html arrays angularjs

我有这个数组:

[
    {type:'a', value:'234'}, 
    {type:'a', value:'5566'}, 
    {type:'b', value:'778'}, 
    {type:'c', value:'899'}, 
    {type:'k', value:'5644'}
]

我想做这个迭代:

<div ng-repeat="obj in array">
    <h3 ng-bind="obj.type"></h3>
    <span ng-bind="obj.value"></span>
</div>

我希望结果是每种类型的标题而不重复,并且在每种类型下我想要值。 如何在不迭代和创建新数组的情况下做到这一点?

期望的结果:

<div>
    <h3>a</h3>
    <span>234</span>
    <span>234</span>
</div>... 

谢谢!

最佳答案

实现您正在寻找的结果的最简单方法是使用 underscore.js _.groupBy http://underscorejs.org/#groupBy 。这也需要稍微更改迭代器。

使用$scope.groups = _.groupBy($scope.array, "type");,我们得到:

{
  "a": [{
    "type": "a",
    "value": "234"
  }, {
    "type": "a",
    "value": "5566"
  }],
  "b": [{
    "type": "b",
    "value": "778"
  }],
  "c": [{
    "type": "c",
    "value": "899"
  }],
  "k": [{
    "type": "k",
    "value": "5644"
  }]
}

使用ng-repeat,我们不会得到预期的确切结果。但是,我们可以使用 ng-repeat(key, value) 变体来实现我们正在寻找的结果,如下所示:

<div ng-repeat="(type, values) in groups">
  <h3 ng-bind="type"></h3>
  <span ng-repeat="v in values">
        <span ng-bind="v.value"></span>
  </span>
</div>

完整示例:

var app = angular.module('stackExample', []);

app.controller('MainCtrl', function($scope) {
  $scope.array = [{
    type: 'a',
    value: '234'
  }, {
    type: 'a',
    value: '5566'
  }, {
    type: 'b',
    value: '778'
  }, {
    type: 'c',
    value: '899'
  }, {
    type: 'k',
    value: '5644'
  }];

  $scope.groups = _.groupBy($scope.array, "type");
  console.log($scope.groups);
});
<script data-require="angular.js@1.4.x" src="https://code.angularjs.org/1.4.8/angular.js" data-semver="1.4.8"></script>
<script data-require="underscore.js@1.8.3" data-semver="1.8.3" src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

<html ng-app="stackExample">

<body ng-controller="MainCtrl">
  <div ng-repeat="(type, values) in groups">
    <h3 ng-bind="type"></h3>
    <span ng-repeat="v in values">
        <span ng-bind="v.value"></span>
    </span>
  </div>
</body>

</html>

关于javascript - AngularJS 重复动态数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35117306/

相关文章:

javascript - IE9 在 iframe 中加载脚本时抛出异常。为什么?

html - 使用响应式设计的图像不显示在 IE 中

html - 对齐导航中的 Logo 并粘贴标题?

css - 如何使这些导航按钮居中?

java - 将索引处的字符串数组与字符串进行比较

arrays - Julia,在两个数组中选择实例的整数与 boolean 结果

javascript - 带有文本div slider jquery的图像内容 slider

php - 使用一个ajax响应更新html中的两个相同值

javascript - 重定向 javascript,替换 url

c - 为什么在 C 中使用指针定义时,我们将 `const` 用于字符串?