Javascript / GAS:计算JSON响应中对象出现的次数

问题描述 投票:0回答:1

因此,我的函数通过外部API从项目系统获取时间条目。汇总时间条目的条件是批准状态必须具有某个值(> 0)。现在,我想添加另一个条件(&&),以便必须至少有一个批准状态每个天,并带有一个值(即,将批准状态的数量等于或大于5进行计算) )。这是一个有强制性的用户,可以输入一周中每一天的条目。我该怎么办?这是我尝试过的方法,不确定如何去做。 PS:这为许多用户计算。

var response = UrlFetchApp.fetch(url, options);
var info = JSON.parse(response.getContentText());
var content = info.data;
var total_hours = 0;
var count = 0;



for (var j = 0; j < content.length; j++) {
    if (content[j].approvals.data.length > 0 && count >= 5) {

        total_hours += content[j].hours;

    }
}

Logger.log(total_hours)

}

样本JSON数据

{“ paging”:{“ per_page”:20,“ page”:1,“ previous”:null,“ self”:“ / api / v1 / users / 678108 / time_entries?assignable_id =&fields = approvals&from = 2020- 01-20&to = 2020-01-24&user_id = 678108&page = 1“,”下一个“:” / api / v1 / users / 678108 / time_entries?assignable_id =&fields = approvals&from = 2020-01-20&to = 2020-01-24&user_id = 678108&page = 2“},”数据“:[{” id“:1661350010,” assignable_id“:2993759,” assignable_type“:” Project“,” user_id“:678108,” bill_rate“:0.1,” bill_rate_id“:37032684,” date“:” 2020-01-20“,” hours“:0.0,” scheduled_hours“:null,” notes“:null,” task“:null,” is_suggestion“:false,” created_at“:” 2020-01- 21T17:32:22Z“,” updated_at“:” 2020-01-24T15:08:22Z“,” approvals“:{” paging“:{” self“:” ../ time_entries / 1661350010 / approvals?per_page = 0&page = 1“,” next“:null,” previous“:null,” page“:1,” per_page“:0},” data“:[]}},

javascript api loops google-apps-script counting
1个回答
0
投票

const data = [
  {
    "id": 1661350010,
    "assignable_id": 2993759,
    "assignable_type": "Project",
    "user_id": 678108,
    "bill_rate": 0.1,
    "bill_rate_id": 37032684,
    "date": "2020-01-20",
    "hours": 5,
    "scheduled_hours": null,
    "notes": null,
    "task": null,
    "is_suggestion": false,
    "created_at": "2020-01-21T17:32:22Z",
    "updated_at": "2020-01-24T15:08:22Z",
    "approvals": {
      "paging": {
        "self": "../time_entries/1661350010/approvals?per_page=0&page=1",
        "next": null,
        "previous": null,
        "page": 1,
        "per_page": 0
      },
      "data": [{
        'status': 'approved'
      }, {
        'status': 'approved'
      }, {
        'status': 'approved'
      },{
        'status': 'approved'
      },{
        'status': 'approved'
      },{
        'status': 'approved'
      },{
        'status': 'error'
      }]
    }
  }
];

const total = data.reduce((acc, el) => {
  const {hours, approvals: {data}} = el;
  if (data.length && data.filter(e => e.status === 'approved').length >= 5) {
    acc += hours;
  }
  return acc;
}, 0);

console.log(total);
© www.soinside.com 2019 - 2024. All rights reserved.