我有一组像这样的数据
$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"]
所以我可以在第二个中迭代它。
我已经通过使用所需的数组创建了一个新的范围,但是我无法正确绑定它,所以我想通过过滤来实现它。提前谢谢。
答案 0 :(得分:2)
我真的建议您使用库Lodash或Underscore来解决此类问题。学会掌握这些对我帮助很大!
当然,您可以使用其中一个创建自己的角度过滤器。您想要使用的方法是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>
如果学生改变,我会重新创建课程阵列。
但听起来好像你正在尝试做别的事情。
但它没有提供所需的输出。
如果你告诉我们想要的输出是什么会有所帮助!