2016-01-25 53 views
0

我想過濾對象結構稍微複雜的對象。我在尋找一種深層過濾的,其中角$濾鏡的陣列內的元素:

[ 
    { 
    "schoolId": 12345, 
    "schoolName": "ZXCVB", 
    "classes": [ 
     { 
     "classId": "C1", 
     "students": 50 
     }, 
     { 
     "classId": "C2", 
     "students": 100 
     } 
    ] 
    }, 

    { 
    "schoolId": 98765, 
    "schoolName": "QWERTY", 
    "classes": [ 
     { 
     "classId": "C1", 
     "students": 100 
     }, 
     { 
     "classId": "C2", 
     "students": 50 
     } 
    ] 
    } 
] 



(這是學校的陣列,每個學校有班級和班級有陣Ids)
在這裏,我正在尋找幫助的是我如何過濾classId,以便它返回學校對象。

回答

1

您應該使用custom filter定義您自己的過濾器功能。 例子:

.filter('classFilter', [function() { 
    return function (input, classId) { 
     if(!classId) return input; 
     var out = []; 
     input.forEach(function(s) { 
      s.classes.forEach(function(c){ 
      if(c.classId==classId) out.push(s); 
      }) 
     }); 
     return out; 
    }; 
}]); 

直播: http://jsfiddle.net/87yod9bf/2/

+0

似乎輸入區分大小寫。儘管它有效。 – Robus

+0

@Italo Ayres - 謝謝!這是我正在尋找的。我問這個問題的那一刻,我期待實現一個自定義過濾器。我寫的那個與此類似。再次感謝。 – jsmtslch

1

可與filtersome來完成:

function filterByClassId(schools, id){ 
    return schools.filter(function(school){ 
     return school.classes.some(function(c){ 
      return c.classId === id; 
     }); 
    }); 
} 

,如果你想將其設置爲filter for angular這是給你的。