Hallo zusammen,
Ich hab auf einer Seite mehrere Tabellen, die durch Objekt Arrays gefüllt werden ca. so:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
|
"members": [
{
"id": 3,
"role": {
"role_id": 1,
"label": "Administrator"
},
"vorname": "test",
"nachname": "user",
"bday": 768960000,
"active": true
}]
|
nun würde ich gerne die Arrays filtern, zurzeit gehe ich für jede Tabelle so vor (acfilters unterscheidet sich von Tabelle zu Tabelle, da die Objekte völlig unterschiedlich aufgebaut sind):
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
$scope.acfilters = {};
$scope.acfilters.role = {active: false, count:0, type: 'number', parent: 'role', path:'role_id', label:'Role', value: ''};
$scope.acfilters.id = {active: false, count:0, type: 'number', path:'id', label:'ID', value: ''};
$scope.acfilters.vorname = {active: false, count:0, type: 'text', path:'vorname', label:'Vorname', value: ''};
$scope.acfilters.nachname = {active: false, count:0, type: 'text', path:'nachname', label:'Nachname', value: ''};
$scope.customFilter = function(user) {
var ok = true;
for(i in $scope.acfilters) {
if($scope.acfilters[i].parent)
var obj = user[$scope.acfilters[i].parent][$scope.acfilters[i].path];
else
var obj = user[$scope.acfilters[i].path];
if($scope.acfilters[i].active && obj){
switch($scope.acfilters[i].type){
case 'number':
if(obj != $scope.acfilters[i].value)
ok = false;
break;
case 'text':
if(!(obj.indexOf($scope.acfilters[i].value) > -1))
ok = false;
break;
}
}
}
if(ok)
return user;
}
|
Das ganze sieht sehr unschön aus, value kann immer nur einen wert enthalten (man kann z.b. nicht nach 2 Rolen(Admin/Tester) filtern) und count sollte die Anzahl der Elemente enthalten wenn man den Filter aktiviert
![:D](wcf/images/smilies/biggrin.png.pagespeed.ce.UPFXer8Yu2.png)
Ich sitze schon seit Stunden daran und sehe vermutlich den Wald vor lauter Bäumen nicht mehr
Hat jemand schon so etwas gemacht und kennt eine saubere schöne Lösung ?
LG
SD