计算其值为True的数组中的项目

时间:2016-01-28 20:48:29

标签: javascript arrays angularjs json

我已经查看了许多讨论这个问题的主题,但也许我只是错过了这个概念。我有一个包含值的属性的对象数组。我需要计算对象数组中的特定属性,只要它的值为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;
       }
    }
};

4 个答案:

答案 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);