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

How to get the count of boolean value (if it is true) in array of objects

本文关键字:如果 true 取对象 何获 数组 布尔值      更新时间:2023-09-26

我必须获取对象数组中布尔值的计数(如果为真)。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
  }
]
您可以使用

Array.prototype.filter()

像这样尝试

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

DEMO

您可以使用过滤器来执行此操作。代码将是:

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

它返回满足条件的值,因此已选择 true 的值。然后,您可以使用truevalues.length来计算值

这应该可以解决问题。 无需角度

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

这是函数式编程方法:

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

解释:末尾的零是a的初始值,a称为累加器。"reduce"函数遍历数组中的每个值,传入累加器"a"也是当前项"c"。胖箭头的正确大小是返回值。如果你的变量值为 true,它将在 a 上加 1 并返回它。如果你的变量值为 false,它将简单地返回 a 的前一个值,准备传递给下一个迭代。a 的最终值将成为返回计数的结果。

这不是有棱角的。这是直接的JavaScript。

所以,如果是响应,那么你可以使用 for 每个循环,例如

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

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

如果你有一个你提到的特定的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;
};