繁体   English   中英

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

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

我必须在对象数组中获取布尔值的计数(如果为真)。 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

那应该可以解决问题。 不需要角度

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

您可以使用filter来做到这一点。 代码将是:

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

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

这是执行此操作的函数式编程方式:

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

说明:末尾的零是a的初始值。 a 称为累加器。 “reduce”函数遍历数组中的每个值,传入累加器“a”以及当前项“c”。 粗箭头的正确大小是返回值。 如果 yourboolvariable 值为真,它会将 1 添加到 a 并返回。 如果您的boolvariable 值为false,它将简单地返回a 的前一个值,准备传递给下一次迭代。 a 的最终值成为返回给 count 的结果。

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

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

$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;
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM