如果循环内满足条件,则对数组求和

时间:2020-04-13 21:04:20

标签: javascript google-apps-script google-sheets

我正在使用以下代码创建表格。它工作正常。

我的最终目标是为“去优先级”添加小计。由于已经在循环表,因此我想利用现有的循环。 (如果不循环执行数组中的每个值,恐怕会减慢代码的速度)

例如,如果我的表是:

[A,de-prioritized,2,1,0,0,1],
[B,de-prioritized,0,2,1,1,0],
[C,other,0,5,2,1,1]

我想得到:[2,3,1,1,1](作为[2,1,0,0,1] + [0,2,1,1,0]之和)。

换句话说:假设我有一个表A1:F10。在A中有一个标志(“不优先”),而在B1:F10中有值。我想在每列中复制公式:SUMIF(A1:A10,“ de-prioritized”,B1:B10),SUMIF(A1:A10,“ de-prioritized”,C1:C10),SUMIF(A1:A10, “取消优先级”,D1:D10),依此类推。我无法设置公式,因为上面示例中的范围是动态的。我试图在脚本中用sumif设置FormulaR1C1,但是没有用。

我发现了一个类似的问题,但是我可能要对n个数组求和,而我无法在我的解决方案中使用该解决方案:Javascript - Sum two arrays in single iteration

我现有的代码:

  var l = sheet2.getRange('A1').getValue();
  for (var i = 0; i<l ;i++) {
    if (sheet3.getRange(i+3,2).getValue() == 'de-prioritized') { 
      sheet3.getRange(i+3,1,1,sheet3.getLastColumn()).setBackgroundRGB(250, 240, 230);
    } else sheet3.getRange(i+3,1,1,sheet3.getLastColumn()).setBackgroundRGB(225, 247, 232)
  }

1 个答案:

答案 0 :(得分:2)

  • 您要使用Google Apps脚本从[2,3,1,1,1]中检索[["A","de-prioritized",2,1,0,0,1],["B","de-prioritized",0,2,1,1,0],["C","other",0,5,2,1,1]]

示例脚本:

const arr = [["A","de-prioritized",2,1,0,0,1],["B","de-prioritized",0,2,1,1,0],["C","other",0,5,2,1,1]];
const res = arr.reduce((ar, [,b,...cdefg]) => {
  if (b == "de-prioritized") ar = ar.length > 0 ? ar.map((e, i) => e + cdefg[i]) : cdefg;
  return ar;
}, []);
console.log(res) // <--- [2,3,1,1,1]

脚本测试:

const arr = [["A","de-prioritized",2,1,0,0,1],["B","de-prioritized",0,2,1,1,0],["C","other",0,5,2,1,1]];
const res = arr.reduce((ar, [,b,...cdefg]) => {
  if (b == "de-prioritized") ar = ar.length > 0 ? ar.map((e, i) => e + cdefg[i]) : cdefg;
  return ar;
}, []);
console.log(res)

参考文献: