计算嵌套状态

时间:2017-11-11 15:53:52

标签: javascript angularjs

有人可以告诉我如何在每个列表中的数组任务中计算所有状态是否为真?

接下来如何将每个列表中的结果保存到$ scope.listsTasks.completedTask = numer?

demo

https://codepen.io/Turqus/pen/xPqrxE

例如

var listsTasks = [
{'name': 'Lista 1',
 countCompletetasks : 1,
'tasks' : [
  {'name':'pierwszy task','status': false},
  {'name':'drugi task','status': false},
  {'name':'trzeci task','status': true}],
   },
{'name': 'Lista 2',    
   countCompletetasks : 0,
  'tasks' : [{'name':'Pierwszy task','status': false}]},
{'name': 'Lista 3',     
  countCompletetasks : 2,
 'tasks' : [
  {'name':'pierwszy task','status': false},
  {'name':'drugi task','status': true},
  {'name':'trzeci task','status': true}]}];

2 个答案:

答案 0 :(得分:0)

我不确定你究竟在寻找什么,但我的回答肯定能帮到你。我循环遍历整个列表并打印下面的答案。你可以相应地显示它。

Angular Code:添加了一个新函数getCurrentStatus来获取$ scope.completedTask

var app = angular.module('app', []);

app.controller('colours', ($scope) => {

    $scope.listsTasks = [{
        'name': 'Lista 1',
        'tasks': [
          { 'name': 'pierwszy task', 'status': false },
          { 'name': 'drugi task', 'status': false },
          { 'name': 'trzeci task', 'status': false }],
    }, {
        'name': 'Lista 2',
        'tasks': [{ 'name': 'Pierwszy task', 'status': false }]
    },
     {
         'name': 'Lista 3',
         'tasks': [
           { 'name': 'pierwszy task', 'status': false },
           { 'name': 'drugi task', 'status': false },
           { 'name': 'trzeci task', 'status': false }]
     }];
    $scope.completedTask = [];
    $scope.getCurrentStatus = function () {

        for(var i=0;i<$scope.listsTasks.length;i++)
        {
            for(var j=0;j<$scope.listsTasks[i].tasks.length;j++)
            {
                if ($scope.listsTasks[i].tasks[j].status)
                {
                    $scope.completedTask.push($scope.listsTasks[i].tasks[j]);
                }
            }
        }
    }


});

在html中添加此div标签。它只会打印列表。请根据需要对数据进行处理。

<div>
            <h1 ng-click="getCurrentStatus()">Status Check</h1>
            {{completedTask}}
        </div>

答案 1 :(得分:0)

使用forEachfilterreduce可以使用一些很好的功能方法。

要简单计算任务数量,您可以执行此操作:

var count = listsTasks.reduce((a,c) => a+= c.tasks.filter(t => t.status).length, 0 )

var listsTasks = [
    {'name': 'Lista 1',
    'tasks' : [
      {'name':'pierwszy task','status': false},
      {'name':'drugi task','status': false},
      {'name':'trzeci task','status': true}],
},
    {'name': 'Lista 2',
      'tasks' : [{'name':'Pierwszy task','status': false}]},
    {'name': 'Lista 3',
     'tasks' : [
      {'name':'pierwszy task','status': false},
      {'name':'drugi task','status': true},
      {'name':'trzeci task','status': true}]}];


var count = listsTasks.reduce((a,c) => a+= c.tasks.filter(t => t.status).length, 0 )

console.log("Number of completed tasks:", count)

要使用计数更改原始对象,您可以:

listsTasks.forEach(item => item.completedTask = item.tasks.filter(t => t.status).length )

var listsTasks = [
    {'name': 'Lista 1',
    'tasks' : [
      {'name':'pierwszy task','status': false},
      {'name':'drugi task','status': false},
      {'name':'trzeci task','status': true}],
},
    {'name': 'Lista 2',
      'tasks' : [{'name':'Pierwszy task','status': false}]},
    {'name': 'Lista 3',
     'tasks' : [
      {'name':'pierwszy task','status': false},
      {'name':'drugi task','status': true},
      {'name':'trzeci task','status': true}]}];


listsTasks.forEach(item => item.completedTask = item.tasks.filter(t => t.status).length )
console.log(listsTasks)

当然,如果您已经使用最后一个代码段更改了对象,则更容易计算,因为您可以只计算添加的数字:

var count = listsTasks.reduce((a, c) => a+= c.completedTask, 0)

var listsTasks = [
    {'name': 'Lista 1',
    'tasks' : [
      {'name':'pierwszy task','status': false},
      {'name':'drugi task','status': false},
      {'name':'trzeci task','status': true}],
},
    {'name': 'Lista 2',
      'tasks' : [{'name':'Pierwszy task','status': false}]},
    {'name': 'Lista 3',
     'tasks' : [
      {'name':'pierwszy task','status': false},
      {'name':'drugi task','status': true},
      {'name':'trzeci task','status': true}]}];



listsTasks.forEach(item => item.completedTask = item.tasks.filter(t => t.status).length )

var count = listsTasks.reduce((a, c) => a+= c.completedTask, 0)
console.log("Number of completed tasks:", count)