猿问

当某些单元格为空时如何在数组中添加数字 - javascript - google app

我有一个 for 循环。循环的目的是在二维数组中索引一个由 5 个数字组成的一维数组,然后将该数组中的数字相加并将其放在另一张纸 (testSheet) 上。它返回像“0,45,,,40”这样的文本。该程序运行良好,除了它没有将数字相加。我猜这是因为有些单元格是空的,它没有将它们识别为数字。


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

  //find Row

  var row = arrSource.indexOf(arrTarget[i]);



  var numArr = shrinkLog.getRange(row+3,4,5).getValues();


  //add units in an array

  var sum = numArr.reduce(function(a,b){return a+b;},0);


  //execute

  var testsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test Sheet");

  testsheet.getRange(i+1,1,1,1).setValue(sum);


}

有人可以帮助我如何让程序将空单元格识别为数字 0 吗?


慕雪6442864
浏览 103回答 2
2回答

HUX布斯

解释:主要问题是numArr是 形式的二维数组[[],[],[]]。要实现目标,您需要执行两个步骤:为了使该reduce方法正常工作,展平数组:var numArr = shrinkLog.getRange(row+3,4,5).flat()过滤掉空值(空白单元格)以获得正确的总和:var numArr = shrinkLog.getRange(row+3,4,5).flat().filter(row=>row!="")解决方案:替换为:var numArr = shrinkLog.getRange(row+3,4,5).getValues();和var numArr = shrinkLog.getRange(row+3,4,5).flat().filter(row=>row!="");for (var i=0; i < arrTarget.length; i++){  //find Row  var row = arrSource.indexOf(arrTarget[i]);  var numArr = shrinkLog.getRange(row+3,4,5).flat().filter(row=>row!="");  //add units in an array  var sum = numArr.reduce(function(a,b){return a+b;},0);  //execute  var testsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test Sheet");  testsheet.getRange(i+1,1,1,1).setValue(sum);}

MMMHUHU

您可以之前在阵列上运行 .map 并将任何null值替换为0.var&nbsp;sum&nbsp;=&nbsp;numArr &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.map(e&nbsp;=>&nbsp;e&nbsp;===&nbsp;null&nbsp;?&nbsp;0&nbsp;:&nbsp;e) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.reduce(function(a,b){return&nbsp;a+b;},0);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答