我有以下形式的元素:
{ number: 1, name: 'name1', selected:[100,400,210,103,102], ... },
{ number: 2, name: 'name2', selected:[100,400,210,104,102], ... },
{ number: 3, name: 'name3', selected:[100,103], ... }
(...是其他字符串属性)
我的目标是编写一个有效的角度过滤器,以便通过$
属性进行过滤,而其他我也可以使用包含过滤器的功能过滤selected
数组。
请注意,命名属性将匹配同一级别的属性 只有,而特殊的$属性将匹配相同的属性 等级或更深。例如。一个数组项
{name: {first: 'John', last: 'Doe'}}
将不会与{name: 'John'}
匹配,但会匹配{$: 'John'}
。
使用过滤器{$: 'name', selected[100,103]}
过滤应该例如返回上面的第一个和第三个元素。是否可以简单地编写一个过滤器来过滤所选的(我做过)并用另一个过滤器链接它?或者甚至可以不编码我自己的过滤器?
我的过滤器代码基本上是:
.filter('selectedFilter', function (underscore) {
return function (elements, filter) {
var result = [];
for (var idx in elements) {
var element = elements[idx];
if (underscore.intersection(element.selected, filter.selected).length === filter.selected.length) {
result.push(element[idx]);
}
}
return result;
}
}
我正在使用过滤器:
<ion-item ng-repeat="element in vm.filtered = ( vm.filterElements(vm.searchFilter))
track by $index"></ion-item>
,其中
function filterElements (filter) {
var filteredElements = $filter('selectedFilter')(vm.elements, filter);
return filteredTrees;
}
答案 0 :(得分:1)
你应该对自己的过滤器有所帮助,因为你想在这里有不同的选择。
angular.filter('special', function(){
return function mySpecificFilter(array, filter){
return array.filter(function(element){
element.name === filter.$ && /* filter to check selected field */
})
}
})
答案 1 :(得分:1)
您可以将Array#filter()
与简单的Javascript:
var array = [{ number: 1, name: 'name1', selected: [100, 400, 210, 103, 102] }, { number: 2, name: 'name2', selected: [100, 400, 210, 104, 102] }, { number: 3, name: 'name3', selected: [100, 103] }],
search = { selected: [100, 103] },
result = array.filter(function (a) {
return Object.keys(search).some(function (k) {
return search[k].every(function (b) {
return ~a[k].indexOf(b);
});
});
});
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');