Google Script рассчитывает, когда несколько переменных вызывают одну и ту же функцию одновременно - PullRequest
1 голос
/ 02 февраля 2020

У меня есть следующие скрипты Google:

function doGet() {
  var result1 = {};
  var result2 = {};
  var result3 = {};

  var infected = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Data').getDataRange().getValues();


result1 = makeObject1(infected);
result2 = makeObject2(infected);
result3 = makeObject3(infected);  


var confirmed = sum(result1);
Logger.log( "sum: "+confirmed );  

var death = sum(result2);
Logger.log( "sum: "+death );  

var recovered = sum(result3);
Logger.log( "sum: "+recovered );    

//return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType.JSON);




}


function sum(values) {
  var sum = 0;
  for( var el in values ) {
    if( values.hasOwnProperty( el ) ) {
      sum += parseFloat( values[el] );
    }
  }
  return sum;
}



function makeObject1(multiArr) {
  var obj = {};
  var countrystats = {};
  var headers = multiArr.shift();

  for(var i = 0; i < headers.length; i++){
    countrystats[i] = multiArr.map(function(app) {
      return app[i];
    })}

  for(var m = 0; m < countrystats[1].length; m++){
  obj[countrystats[1][m]] = 0;
  }

  for(var j = 0; j < countrystats[1].length; j++){

    var TempVar;
    TempVar = obj[countrystats[1][j]];
    obj[countrystats[1][j]] = TempVar + countrystats[3][j];

  }
  return obj;
}


function makeObject2(multiArr) {
  var obj = {};
  var countrystats = {};
  var headers = multiArr.shift();

  for(var i = 0; i < headers.length; i++){
    countrystats[i] = multiArr.map(function(app) {
      return app[i];
    })}

  for(var m = 0; m < countrystats[1].length; m++){
  obj[countrystats[1][m]] = 0;
  }

  for(var j = 0; j < countrystats[1].length; j++){

    var TempVar;
    TempVar = obj[countrystats[1][j]];
    obj[countrystats[1][j]] = TempVar + countrystats[4][j];

  }
  return obj;
}


function makeObject3(multiArr) {
  var obj = {};
  var countrystats = {};
  var headers = multiArr.shift();

  for(var i = 0; i < headers.length; i++){
    countrystats[i] = multiArr.map(function(app) {
      return app[i];
    })}

  for(var m = 0; m < countrystats[1].length; m++){
  obj[countrystats[1][m]] = 0;
  }

  for(var j = 0; j < countrystats[1].length; j++){

    var TempVar;
    TempVar = obj[countrystats[1][j]];
    obj[countrystats[1][j]] = TempVar + countrystats[5][j];

  }
  return obj;
}

Когда я пытаюсь найти result1, result2, and result3 и запустить код, как указано выше, я получаю в журналах следующее:

[20-02-02 18:52:25:651 CET] sum: 14549
[20-02-02 18:52:25:652 CET] sum: 11
[20-02-02 18:52:25:652 CET] sum: 102

Это неверно. Когда я запускаю только один из них, это работает. (Например, я закомментирую result1 и result2, и я получаю правильное значение для result3. Или я закомментирую result1 и result3, и я получаю правильное значение для result2. Я думаю, что result1 всегда корректен)

вывод должен быть:

[20-02-02 18:52:25:651 CET] sum: 14549
[20-02-02 18:52:25:652 CET] sum: 305
[20-02-02 18:52:25:652 CET] sum: 340

1 Ответ

1 голос
/ 09 февраля 2020

Ответ:

Array.Shift () Удален первый ряд. Используйте это только один раз для удаления заголовков, а затем используйте Array [0] для доступа к данным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...