Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GAS/Javascript在汇总数字时给出错误的数字_Javascript_Arrays_Loops_Math_Google Apps Script - Fatal编程技术网

GAS/Javascript在汇总数字时给出错误的数字

GAS/Javascript在汇总数字时给出错误的数字,javascript,arrays,loops,math,google-apps-script,Javascript,Arrays,Loops,Math,Google Apps Script,我的Javascript/GAS代码使用用户ID通过API调用特定日期范围(1周)的时间条目,并汇总小时数。这些时间条目保存在一个数组中,然后求和。日志上的前50个添加项是正确的,但是当你浏览列表时,你会发现错误的汇总数字和长的小数位。可能有什么问题,我能做些什么来解决这个问题。这是我的密码: var TKF_URL = 'https://api.10000ft.com/api/v1/'; var TKF_AUTH = 'auth' var TKF_PGSZ = 2500 var from =

我的Javascript/GAS代码使用用户ID通过API调用特定日期范围(1周)的时间条目,并汇总小时数。这些时间条目保存在一个数组中,然后求和。日志上的前50个添加项是正确的,但是当你浏览列表时,你会发现错误的汇总数字和长的小数位。可能有什么问题,我能做些什么来解决这个问题。这是我的密码:

var TKF_URL = 'https://api.10000ft.com/api/v1/';
var TKF_AUTH = 'auth'
var TKF_PGSZ = 2500
var from = '2020-01-06'
var to = '2020-01-22'
var options = {
    method: 'get',
    headers: {
        Authorization: 'Bearer ' + TKF_AUTH
    }
};

function getUsers() {
    var userarray = [];
    var lastpage = false;
    var page = 1;
    do {

        // gets 10kft data   
        var users = read10k_users(page);

        // writes data from current page to array   
        for (var i in users.data) {
            var rec = {};

            // pushing of mandatory data     
            rec.id = users.data[i].id;
            rec.display_name = users.data[i].display_name;
            rec.email = users.data[i].email;
            userarray.push(rec);
        }

        // checks if this is the last page (indicated by paging next page link beeing null   
        if (users.paging.next != null) {
            lastpage = false;
            var page = page + 1;
        } else {
            lastpage = true;
        }
    }
    while (lastpage == false);
    return (userarray);


    return (userarray);

}

function read10k_users(page) {

    var endpoint = 'users?';

    var url = TKF_URL + endpoint + 'per_page=' + TKF_PGSZ + '&auth=' + TKF_AUTH + '&page=' + page;
    var response = UrlFetchApp.fetch(url, options);
    var json = JSON.parse(response);

    //Logger.log(json.data)
    return (json);
}


function showTimeData() {

    var users = getUsers()
    var endpoint = 'users/';
    var time_array = [];



    for (var i = 0; i < users.length; i++) {

        var total_hours = 0;

        // Logger.log(users[i].id)
        var url = 'https://api.10000ft.com/api/v1/users/' + users[i].id + '/time_entries?fields=approvals' + '&from=' + from + '&to=' + to + '&auth=' + TKF_AUTH;
        var response = UrlFetchApp.fetch(url, options);

        var info = JSON.parse(response.getContentText());

        var content = info.data;

        for (var j = 0; j < content.length; j++) {

            total_hours += content[j].hours;

            //     }
            //     
            //       if(total_hours < 35){
            //    
            //          sendMail(user[i]);
            //      
            //       }

            Logger.log('User name: ' + users[i].display_name + ' ' + 'User id: ' + users[i].id + '  ' + 'total hours: ' + total_hours)



        }

    }

    function sendMail(user) {



        var emailAddress = user.email;
        var message = 'Dear ' + user.display_name + 'Your timesheets is incomplete , please visist 10k Ft and commlete your timesheet'
        var subject = 'TimeSheet';

        MailApp.sendEmail(emailAddress, subject, message);

    }
}
var TKF\u URL='1https://api.10000ft.com/api/v1/';
var TKF_AUTH='AUTH'
var TKF_PGSZ=2500
变量自='2020-01-06'
风险值至='2020-01-22'
变量选项={
方法:“get”,
标题:{
授权:“持有人”+TKF\U授权
}
};
函数getUsers(){
var userarray=[];
var lastpage=false;
var-page=1;
做{
//获取10英尺的数据
var用户=read10k_用户(第页);
//将数据从当前页写入数组
for(users.data中的var i){
var rec={};
//强制数据的推送
rec.id=users.data[i].id;
rec.display\u name=users.data[i]。display\u name;
rec.email=users.data[i].email;
推送(rec);
}
//检查这是否是最后一页(通过分页下一页链接显示为空)
if(users.paging.next!=null){
lastpage=false;
var page=page+1;
}否则{
lastpage=true;
}
}
while(lastpage==false);
返回(userarray);
返回(userarray);
}
函数read10k_用户(第页){
var端点='users';
var url=TKF_url+endpoint+'per_page='+TKF_PGSZ+'&auth='+TKF_auth+'&page='+page;
var response=UrlFetchApp.fetch(url,选项);
var json=json.parse(响应);
//Logger.log(json.data)
返回(json);
}
函数showTimeData(){
var users=getUsers()
var端点='users/';
var-time_数组=[];
对于(var i=0;i
日志结果


您在循环之外声明了
总时数。因此,您要做的是计算所有员工的总时数,而不是每个员工的总时数

(删除了大量代码,只显示bug的重要部分)

您的循环应该如下所示:

for (var i = 0; i < users.length; i++) {
  var total_hours = 0;

  var url = "https://api.10000ft.com/api/v1/users/" + users[i].id + "/time_entries?fields=approvals" + "&from=" + from + "&to=" + to + "&auth=" + TKF_AUTH;
  var response = UrlFetchApp.fetch(url, options);

  var info = JSON.parse(response.getContentText());

  var content = info.data;

  for (var j = 0; j < content.length; j++) {
    total_hours += content[j].hours;
  }

  if (total_hours < 35) {
    sendMail(user[i]);
  }

  Logger.log("User name: " + users[i].display_name + " " + "User id: " + users[i].id + "  " + "total hours: " + total_hours);
}
for(var i=0;i
您在循环之外声明了
总时数。因此,您要做的是计算所有员工的总时数,而不是每个员工的总时数

(删除了大量代码,只显示bug的重要部分)

您的循环应该如下所示:

for (var i = 0; i < users.length; i++) {
  var total_hours = 0;

  var url = "https://api.10000ft.com/api/v1/users/" + users[i].id + "/time_entries?fields=approvals" + "&from=" + from + "&to=" + to + "&auth=" + TKF_AUTH;
  var response = UrlFetchApp.fetch(url, options);

  var info = JSON.parse(response.getContentText());

  var content = info.data;

  for (var j = 0; j < content.length; j++) {
    total_hours += content[j].hours;
  }

  if (total_hours < 35) {
    sendMail(user[i]);
  }

  Logger.log("User name: " + users[i].display_name + " " + "User id: " + users[i].id + "  " + "total hours: " + total_hours);
}
for(var i=0;i
您在循环外声明了
总小时数
。因此,您要做的是计算所有员工的总小时数,而不是每个员工的总小时数。将
总小时数
的声明移动到循环内,或在循环顶部将其设置为零。您在循环外声明了
总小时数
你的循环。所以你要做的是计算所有员工的总小时数,而不是每个员工的总小时数。要么将
total_hours
的声明移动到循环内部,要么在循环顶部将其设置为零。嘿@some,感谢你花时间查看代码。我实际上已经将total_hours声明移动到了t内部他循环,但这次我得到的日期范围的小时数更少。我已编辑代码,从头到尾包含完整的代码,以便您查看并提出建议。我将非常感谢您在这方面的建议。我如何重置total_hours变量?@levi you moved int
for (var i = 0; i < users.length; i++) {
  var total_hours = 0;

  var url = "https://api.10000ft.com/api/v1/users/" + users[i].id + "/time_entries?fields=approvals" + "&from=" + from + "&to=" + to + "&auth=" + TKF_AUTH;
  var response = UrlFetchApp.fetch(url, options);

  var info = JSON.parse(response.getContentText());

  var content = info.data;

  for (var j = 0; j < content.length; j++) {
    total_hours += content[j].hours;
  }

  if (total_hours < 35) {
    sendMail(user[i]);
  }

  Logger.log("User name: " + users[i].display_name + " " + "User id: " + users[i].id + "  " + "total hours: " + total_hours);
}