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
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