在Google Apps脚本中将数组输入Math.Max

时间:2017-07-19 23:53:57

标签: javascript google-apps-script

在Google表格中,我有一个基于我在网上找到的一些帖子/博客的自定义表单,以了解有关Google App Scripts的更多信息。该表单正常工作,但我遇到了应该为该行创建ID的列的问题。

从我的阅读中,似乎我的问题是math.max()采用的是列表而不是数组。此外,我发现常规Javascript的方法似乎都没有在Google Apps脚本中使用。例如,math.max.apply(null,array)。

我是否必须迭代数组或者是否需要使max()获取数组?

这是我一直在玩的代码。

function itemAdd(form) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var sh = SpreadsheetApp.getActiveSheet();
  var lRow = sh.getLastRow();
  var range = sh.getRange(3,1,lRow,1);
  var maxNum = Math.max(range)
  sheet.appendRow([maxNum,form.category, form.item, form.manupub, 
form.details, form.quantity]);
  return true;
}

2 个答案:

答案 0 :(得分:4)

您可以在GAS上使用Math.max.apply()。由getValues()检索的数据是一个二维数组。因此,为了使用Math.max.apply()的数据,必须将数组展平。通过反映这一点,可以按如下方式修改示例脚本。

脚本:

function itemAdd(form) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var sh = SpreadsheetApp.getActiveSheet();
  var lRow = sh.getLastRow();
  var range = sh.getRange(3,1,lRow,1);
  var ar = Array.prototype.concat.apply([], range.getValues());
  var maxNum = Math.max.apply(null, ar);
  sheet.appendRow([maxNum,form.category, form.item, form.manupub, form.details, form.quantity]);
  return true;
}

如果我误解了你的问题,我很抱歉。

答案 1 :(得分:1)

以下内容应该有所帮助。您需要从范围中提取值。这将返回一个二维数组。

var vals = range.getValues();
//assuming your values are non negative, set the initial max to 0
var max = 0;
for(var i=0; i<vals.length; i++) {
  max = Math.max(max, vals[i][0]);
}
//max will now have the largest value