我已经查看了许多讨论这个问题的主题,但也许我只是错过了这个概念。我有一个包含值的属性的对象数组。我需要计算对象数组中的特定属性,只要它的值为true。
在下面的JSON中,我需要遍历数组中的每个项目,然后只计算" IsPartyEnabled"评估为真。所以,来自下面JSON的计数将= 3.然后我需要返回" 3"回到我的看法。
FunToBeHad [{
"IsFunAllowed": true,
"IsPartyEnabled": true,
"IsJoyRefillable": true,
},{
"IsFunAllowed": true,
"IsPartyEnabled": false,
"IsJoyRefillable": true,
},{
"IsFunAllowed": true,
"IsPartyEnabled": true,
"IsJoyRefillable": true,
},{
"IsFunAllowed": true,
"IsPartyEnabled": true,
"IsJoyRefillable": true,
}]
我试过这个,但是因为我认为该属性仍未定义而陷入困境。没有运气。
$scope.partyEnabled = function () {
for (var i = 0; i < $scope.FunToBeHad.length; ++i) {
if($scope.FunToBeHad[i].IsPartyEnabled = true ) {
return i;
}
}
};
答案 0 :(得分:4)
您应该使用==
进行比较,而不是使用true
将所有内容分配到=
。你应该保持计数而不是返回第一个索引:
$scope.partyEnabled = function () {
var count = 0;
for (var i = 0; i < $scope.FunToBeHad.length; ++i) {
if($scope.FunToBeHad[i].IsPartyEnabled == true ) {
count++;
}
}
return count;
};
答案 1 :(得分:1)
如果你想在控制器中注入$ filter,你也可以这样做:
$scope.partyEnabled = function() {
return $filter('filter')($scope.FunToBeHad, {IsPartyEnabled: true}).length;
};
答案 2 :(得分:1)
您可以使用filter方法,这使得此函数返回一个新数组,其中包含所有通过规定测试的元素。 然后你测量通过测试的项目数量并将其返回到他们的数字“长度”属性
了解更多信息: https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Array/filter
$scope.partyEnabled = function () {
return $scope.FunToBeHad.filter(function(elem){
return elem.IsPartyEnabled;
}).length;
};
答案 3 :(得分:0)
正如其他答案中所建议的那样,你错过了使用= / == / === 除了我建议重构您的代码以使其更可重用:
$scope.calcNumber = function (propertyToCheck, expectedValue) {
var result = 0;
for (var i = 0; i < $scope.FunToBeHad.length; ++i) {
if($scope.FunToBeHad[i][propertyToBeTrue] === expectedValue) {
++result;
}
}
return result;
};
你可以这样使用:
var x = $scope.calcNumber('IsPartyEnabled', true);