Angularjs:数组中的Ng-repeat和唯一过滤器

时间:2016-02-28 23:11:19

标签: angularjs angularjs-ng-repeat angularjs-filter

我有一组像这样的数据

$scope.students = [
   { name:"John", courses:["Math", "Physics", "Chemistry"] },
   { name:"Paul", courses:["Economics", "Math", "Sociology"] }
]

我想要一种使用角度过滤器进行过滤的方法,这样我就可以获得所有主题的列表而无需重复。 我一直试图使用独特的过滤器,但是因为我尝试迭代而无法让它工作

<ul ng-repeat="student in students">
   <li ng-repeat="x in student.courses | unique:courses"></li>
       {{x}}
</ul>

我想要的第一个ng-repeat的输出是这样的数组:

["Math", "Physics", "Chemistry", "Economics", "Sociology"]

所以我可以在第二个中迭代它。

我已经通过使用所需的数组创建了一个新的范围,但是我无法正确绑定它,所以我想通过过滤来实现它。提前谢谢。

2 个答案:

答案 0 :(得分:2)

我真的建议您使用库LodashUnderscore来解决此类问题。学会掌握这些对我帮助很大!

当然,您可以使用其中一个创建自己的角度过滤器。您想要使用的方法是union:

_.union(_.flatten(_($scope.students).pluck("courses")))

我使用pluck从studens对象中取出课程数组,然后我展平结果(去掉它嵌套的数组),然后我使用union来获取每个主题只有一次。

答案 1 :(得分:0)

如果要求实际上是:

  

...获取所有主题的列表而不重复。

然后我会为主题制作一个单独的数组:

$scope.courses = [];

// There are many ways to do skin this cat... (prograde does have a point!)
$scope.students.forEach(function(student) {
  student.courses.forEach(function(course) {
    if ( $scope.courses.indexOf(course) === -1 ) {
      $scope.courses.push(course);
    }
  })
});

HTML

<ul>
  <li ng-repeat="course in courses">
    {{ course }}
  </li>
</ul>

如果学生改变,我会重新创建课程阵列。

但听起来好像你正在尝试做别的事情。

  

但它没有提供所需的输出。

如果你告诉我们想要的输出是什么会有所帮助!

http://plnkr.co/edit/bZNjIEFznvuyTU3zxAp1?p=preview