我试图通过设置为Log: true
如果一个对象将此属性设置为false,我想将其过滤掉。以下是JSON结构的示例:
$scope.Main =
{
"MyBook" :
{
"Title": "The Road",
"Type" : "Text",
"Log" : false
},
"MyCat":
{
"Name" : "Penny",
"Type" : "Pet",
"Log" : true
},
"Car":
{
"Make" : "Toyota",
"Model" : "Camry",
"Type" : "Vehicle",
"Log" : false
}
}
如您所见,对象本身并不相似,但它们都包含一个日志属性。
答案 0 :(得分:1)
<强> Online Demo 强>
这是我在搜索属性值等于 true
时过滤对象的方法var sampleObj = {/* you sample object*/};
var filtered = Object.keys(sampleObj).reduce(function(arr,prop){
if(Object.keys(sampleObj[prop])
.filter(function (p) {return p === "Log";})){
if(sampleObj[prop].Log==true){
arr.push(sampleObj[prop]);
}
}
return arr;
},[]);
console.log(filtered);
由于您使用的是角度,可能需要使用自定义过滤器:
接近的地方:
自定义过滤器:
angular.module('myApp', []).filter('myFilter', function() {
return function(sampleObj, param1) {
return Object.keys(sampleObj).reduce(function(arr,prop){
if(Object.keys(sampleObj[prop])
.filter(function (p) {return p === "Log";})){
if(sampleObj[prop].Log==param1){
arr.push(sampleObj[prop]);
}
}
return arr;
},[]);
};
});
并在 html
中 <li ng-repeat="item in sampleObj | myFilter: true">
答案 1 :(得分:0)
尝试使用underscorejs library。
您可以使用_.filter
和_.has
等功能来过滤列表。
这是我如何尝试实现该对象的一个例子:
var filtered = _.filter($scope.Main, function(obj) {
return _.has(obj, "Log") && obj.Log;
}
答案 2 :(得分:0)
使用自定义角度滤镜:
.filter('filterLog', function(){
return function(items){
for (var item in items) {
if (items[item].Log === false) delete items[item];
}
return items;
}
})
然后,在您的视图中,您可以输出过滤后的列表,如下所示:
<li ng-repeat="(key, value) in Main | filterLog">{{value}}</li>
如果您需要在控制器中使用它,您可以:
$scope.filtered = $filter('filterLog')($scope.Main);