如何在对象数组中获取布尔值的计数(如果为true)

时间:2016-07-11 11:10:40

标签: javascript

我必须在对象数组中获得布尔值的计数(如果为真)。 json结构如下:

[
  {
    "id": 5,
    "name": "a",
    "select": true
  },

  {
    "id": 3,
    "name": "b",
    "select": false
  },

  {
    "id": 2,
    "name": "x",
    "select": true
  },

  {
    "id": 1,
    "name": "y",
    "select": false
  }
]

6 个答案:

答案 0 :(得分:5)

您可以使用 Array.prototype.filter()

执行此操作

试试这个

console.log(data.filter((x,i) => { return x.select; }).length)

DEMO

答案 1 :(得分:1)

这应该可以解决问题。没有角度需要

function getTrueCount(array) {
  var count = 0;
  for (var i = 0; i < array.length; i++) {
    if (array[i].select) {
      count++;
    }
  }
  return count;
}

答案 2 :(得分:1)

这是执行此功能的编程方式:

var count = yourarray.reduce((a, c) => c.yourboolvariable ? ++a : a, 0);

说明: 最后的零是a的初始值。 a被称为累加器。 “reduce”函数遍历数组中的每个值,传入累加器“a”以及当前项“c”。胖箭头的正确大小是返回值。如果yourboolvariable值为true,则将a添加1并返回该值。如果yourboolvariable值为false,它将只返回a的先前值,准备传入下一次迭代。 a的最终值变为返回计数的结果。

这不是棱角分明的。这是直接的JavaScript。

答案 3 :(得分:0)

您可以使用filter执行此操作。代码是:

var truevalues = yourarray.filter(function(element) {
    return (element.select == true);
}

它返回完成条件的值,因此选择true的值。然后,您可以使用truevalues.length

计算值

答案 4 :(得分:0)

所以, 如果它是响应那么 你可以使用forEach循环,如

$scope.count = 0;
angular.forEach(response, function(value, key) {
  if (value.select == true) {
    $scope.count = $scope.count + 1;
  }
});

然后你可以从这里取$scope.count

答案 5 :(得分:0)

如果您有提到的特定JSON结构,则可以尝试类似的方法。可以使用箭头功能

const getResult = function(inputArr){
    let result = [];
    if( Object.prototype.toString.call(inputArr) === '[object Array]' && inputArr.length > 0 ){
        result = inputArr.filter(function(item){
            return item.select;
        });
    }
    return result.length;
};