为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕雪6442864 2023-04-27 10:25:47
我有一个 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 吗?
查看完整描述

2 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

解释:

主要问题是numArr是 形式的二维数组[[],[],[]]

要实现目标,您需要执行两个步骤:

  1. 为了使该reduce方法正常工作,展平数组:

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

  2. 过滤掉空值(空白单元格)以获得正确的总和:

    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);


}


查看完整回答
反对 回复 2023-04-27
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

您可以之前在阵列上运行 .map 并将任何null值替换为0.

var sum = numArr
              .map(e => e === null ? 0 : e)
              .reduce(function(a,b){return a+b;},0);


查看完整回答
反对 回复 2023-04-27
  • 2 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信