[英]Angular filtering array within array
我无法使用$ filter或$ grep进行深度过滤。
我有一个Store对象数组,每个Store对象都包含一个Orders数组:
vm.Stores:
[{
Stores: [{
Id: 1,
Orders: [{
Id: 11,
Selected: true
}, {
{
Id: 12,
Selected: false
}]
}, {
Id: 2,
Orders: [{
Id: 21,
Selected: false
}, {
{
Id: 22,
Selected: true
}]
}],
}]
我想要其selected属性为true的Orders数组:
vm.selectedOrders:
[{
Id: 11,
Selected: true
}, {
Id: 22,
Selected: true
}]
这是我正在尝试的:
vm.selectedOrders = $filter('filter')(Stores.Orders, {'selected': true});
显然不正确。 我尝试过的其他方法都嵌套了forEach循环,但是我经常处理这些订单,因此我需要一种有效的方法来完成它。
我尝试将订单展平到自己的数组,但是现在我正在管理另一个对象数组,并且它不是我的html中使用的对象数组,因此不匹配。
该文档是无益的。 过滤器有多种用途,似乎都不适合我https://docs.angularjs.org/guide/filter
并且参数说明毫无意义
https://docs.angularjs.org/api/ng/filter/filter
这个例子是
什么是比较器?
我不是Angular专家。 但是,对于给定的结构,无论使用Angular抽象还是通过语言核心完成嵌套循环,都无法避免-一种直接的解决方案可能看起来像这样……
var
Stores = [{
Id: 1,
Orders: [{
Id: 11,
Selected: true
}, {
Id: 12,
Selected: false
}]
}, {
Id: 2,
Orders: [{
Id: 21,
Selected: false
}, {
Id: 22,
Selected: true
}]
}],
selectedOrders = Stores.reduce(function (collector, store) {
collector = collector.concat(
store.Orders.filter(function (order) {
return order.Selected;
})/*.map(function (order) {
return {
storeId: store.Id,
orderId: order.Id
};
})*/
);
return collector;
}, []);
console.log("selectedOrders : ", selectedOrders);
您可以简单地在视图中使用filter来做到这一点:
(function() { "use strict"; angular.module('app', []) .controller('mainCtrl', function() { var vm = this; vm.stores = [ { "Id":1, "Orders":[ { "Id":11, "Selected":true }, { "Id":12, "Selected":false } ] }, { "Id":2, "Orders":[ { "Id":21, "Selected":false }, { "Id":22, "Selected":true } ] } ]; }); })();
<!DOCTYPE html> <html ng-app="app"> <head> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.7/angular.min.js"></script> </head> <body ng-controller="mainCtrl as main"> <ul> <li ng-repeat-start="store in main.stores" ng-bind="store.Id"></li> <ul ng-repeat-end ng-repeat="order in store.Orders | filter: { Selected: true }"> <li ng-bind="'Id:' + order.Id"></li> </ul> </ul> </body> </html>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.