[英]google scripts miscalculates when multiple variables call the same function at the same time
我有以下谷歌脚本:
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
回答:
Array.Shift() 删除了第一行。 仅使用一次删除标题,然后使用 Array[0] 访问数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.