Google App Script:增加数组中的每个值

时间:2016-12-20 16:19:00

标签: arrays google-apps-script

我有一个数组,它是一张工作表中的一行数字。我想增加行中的每个数字,但是我的尝试只是在数组的末尾添加值1。一旦我对它进行了排序,我就需要将数组添加回到工作表上,但我还没有那么远。我试过这个:

function turnIncrement() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lastColumn = ss.getLastColumn()
var turnValuesRow6 = ss.getRange(6, 4, 1, lastColumn); 
var turnValues = turnValuesRow6.getValues(); 

for (var i=0; i < turnValues.length; i++) {
 turnValues[i] += 1;}
}

和这个

function turnIncrement() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lastColumn = ss.getLastColumn()
var turnValuesRow6 = ss.getRange(6, 4, 1, lastColumn); 
var turnValues = turnValuesRow6.getValues(); 

turnValues.push(turnValues[turnValues.length - 1] + 1);
turnValues.shift(); 

两者都只是在数组的末尾添加1。我想我可以尝试单独获得每个值,但这似乎非常低效。

2 个答案:

答案 0 :(得分:1)

要理解的主要是turnValues是一个二维数组,因为这是getValues的返回类型。对于2乘2范围,它看起来像[[1, 2], [3, 4]]。对于1乘2范围(1行,2列),它是[[1, 2]]。对于1×1范围(单个单元格),它就像[[1]]

在您的特定情况下,使用单行范围,修复将是

for (var i=0; i < turnValues[0].length; i++) {
 turnValues[0][i] += 1;
}

一般来说,你需要一个双循环

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

答案 1 :(得分:1)

您可以使用Array.map()迭代数组。

  

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

这是一个简单的例子。 map()将循环遍历数组中的每个值,并且提供的函数将返回对值进行的操作;

  

[2,3,4] = [1,2,3] .map(function(value){return value + = 1});

你的榜样。

function turnIncrement() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var lastColumn = ss.getLastColumn();
  var turnValuesRow6 = ss.getRange(6, 4, 1, lastColumn); 
  var turnValues = turnValuesRow6.getValues(); 
  turnValues =  turnValues[0].map(function(col){ return col+=1});
  turnValuesRow6.setValues([turnValues])
}

提示:记住getValues返回Array [] []。所以,即使你只请求一行,它仍然返回一个多维数组,而setValues()正在寻找一个Array [] []。