Angularjs: Order and Filter by array intersect
Angularjs: Order and Filter by array intersect
这是我的条件:我通过异步调用检索用户列表及其类别。
客户端可以选择类别。
现在,我必须只显示那些在自己的类别中从客户端中选择的用户,他们按照自己的类别与所选类别匹配的数量排序。
示例。(括号内的数字是ID)
User B - Cats: - (no one)
User C - Cats: [7]Cat7, [2]Cat2
User A - Cats: [1] Cat1, [2]Cat2, [5]Cat5
客户选择的猫:[2]、[1]、[8]
因此,在这里,用户B将不会出现,剩余的顺序是A(2个匹配),C(1个匹配)。
这是一个庞克,我不知道从哪里开始。
http://plnkr.co/edit/oNlD8T?p=preview
最好是在Angular中进行(以及如何进行?)或进行新的异步调用(观察所选的猫),然后服务器处理所有这些?(服务器端使用PHP,我不知道如何使用nodejs)
您可以将filter
过滤器与自定义表达式function(value, index, array)
一起使用,您可以将其与所选数组进行比较。
https://docs.angularjs.org/api/ng/filter/filter
另一种方法是使用lodash,它有_.some
和_.intersection
,这将使编写自定义表达式变得更容易。
https://lodash.com/docs#some
https://lodash.com/docs#intersection
您还可以为自己的filter(name, filterFactory)
制作自定义过滤器:https://docs.angularjs.org/tutorial/step_09
我为您创建了一个plnkr.co/edit/nHVC5EbWYLarHnHR3LPQ?p=预览希望这对你的要求有所帮助。
我刚刚修改了现有的代码。添加了一个条件来检查数组的长度是否大于零ng show="user.cats.length>0"。
<ul>
<li ng-show="user.cats.length > 0" ng-repeat="user in users">{{ user.name }} - <span ng-repeat="userCat in user.cats" style="margin-right:10px;"><strong>[{{ userCat.id }}]</strong> {{ userCat.label }}</span></li>
</ul>
还要注意,大于符号(>0)对于ng显示来说并不是真正必要的。它只是增加了解决方案的清晰度。
正如Alon Valadji建议的那样,我用ng show和ng if更新了plunker。检查这篇文章的角度性能ng-show与ng-if,并根据您的要求做出决定。
- 如何为json对象中的段发送array[]
- Array.length似乎不起作用;console.log则显示其他情况
- 如何迭代Array.prototype函数
- Javascript 新的 Array 和 join() 方法
- Array.lenght = undefined
- Javascript setTimeout for an array
- NodeJS API调用中Array中的Push和Pull元素
- 如何在MongoDB中将String转换为Array
- 为什么我可以在Array属性对象中找到Javascript Array for Each方法
- 您的平台不支持RxJS-Array.observe
- 在Jquery/Javascript中的Array中插入Textbox值
- 通过jQueryAjax一起发布Array和Form数据时出现问题
- Array.every返回false,而不是类型error
- Javascript-通过i=0直接传递array[0]与array[0],array[i]在“;如果“;陈述
- JavaScript Array unshift() 以一种不可变的方式
- 为什么可以't我用Set对象调用Array.prototype.map
- Array方法中的Javascript循环
- ngRepeat filter by array-property
- Angularjs: Order and Filter by array intersect
- angular ng-repeat filter array by key