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

3

我需要获取包含对象的数组中布尔值(如果为true)的数量。 以下是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
  }
]

2
因为你没有提供任何尝试(代码片段)来解决你的问题,所以被点踩了。 - Maxim Shoustin
6个回答

9

1
这是函数式编程的实现方式:
var count = yourarray.reduce((a, c) => c.yourboolvariable ? ++a : a, 0);

解释: 末尾的零是a的初始值。a被称为累加器。"reduce"函数遍历数组中的每个值,同时传递累加器"a"和当前项"c"。右侧的箭头是返回值。如果yourboolvariable的值为true,则会将1添加到a并返回。如果yourboolvariable的值为false,则只会返回上一个a的值,准备传递给下一次迭代。最终的a值成为返回给count的结果。
这不是Angular,而是纯JavaScript。

各种浏览器的支持情况如何? - Vishal Kumar Sahu
1
Chrome:是的,Edge:是的,Firefox:3,Internet Explorer:9,Opera:10.5,Safari:4,您可以在此之前使用 polyfills。 - tone
你应该更新你的答案,而不是在评论中回复。 - Vishal Kumar Sahu
真的吗?我没有看到其他人会在他们的解决方案中注明适用的浏览器,而通过谷歌搜索答案也很容易找到。 - tone

1
那应该就行了。不需要 Angular。
function getTrueCount(array) {
  var count = 0;
  for (var i = 0; i < array.length; i++) {
    if (array[i].select) {
      count++;
    }
  }
  return count;
}

1
您可以使用filter实现此功能。代码如下:
var truevalues = yourarray.filter(function(element) {
    return (element.select == true);
}

它返回满足条件的值,即具有选择为 true 的值。然后,您可以使用 truevalues.length 计算这些值的数量。

0

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

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

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


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接