javascript - 谷歌网络应用程序将单元素数组视为单个字符数组

标签 javascript html arrays google-apps-script google-sheets

我正在使用 Google Apps 脚本构建一个网络应用程序。它目前由一个 HTML 表单组成,该表单将表单数据传递到 GAS 函数,该函数根据表单数据从 Google 电子表格中检索某些信息。然后,它将电子表格数据返回到 HTML 端并打印出一个列表。

HTML 表单的一部分是一组复选框,如下所示:

<input type="checkbox" name="stage" value="startup" id="startup" />
<label for="startup">Startup</label><br>
<input type="checkbox" name="stage" value="yrs210" id="yrs210" />
<label for="yrs210">Years 2-10</label><br>
<input type="checkbox" name="stage" value="experienced" id="experienced" />
<label for="experienced">Experienced</label><br>
etc...

将复选框与电子表格中特定列的内容进行比较,并用于确定要返回的数据。

长话短说(太晚了),当选中多个复选框时,它会按预期工作。然而,当仅检查一个时,它不会被视为数组中的单个元素,而是被视为由每个字符组成的数组。例如,"startup" 变为 ["s","t","a","r","t","u","p"] 。然后我的脚本搜索电子表格中的每个字母,当然有很多匹配项。

这可能是我在自学 JavaScript 时错过的一些非常基本的东西。有什么指点吗?知道为什么会发生这种情况吗?

如果有帮助,这是我的脚本的主要部分:

var stage = formObject.stage;
//get spreadsheet contents
var ss = SpreadsheetApp.openById('ID');
var dataSheet = ss.getSheetByName('sheet1');
var dataRange = dataSheet.getDataRange();
var data = dataRange.getValues();
var cStage = 2; //Number of column containing stages
var cOutput = 4; //Number of column containing output

//compare selections to spreadsheet, list matches
var array1 = [];
for(var i = 0; i < stage.length; i++) {
  for(var j = 0; j < data.length; j++) {
    if(data[j][cStage - 1].indexOf(stage[i]) > -1) {
      array1.push(data[j][cOutput - 1]);
    }
  }
}
//loop to delete duplicate entries
var array = [];
for(var o = 0; o < array1.length; o++) {
  if(array.indexOf(array1[o]) == -1) {
    array.push(array1[o]);
  }
}
return array;

我认为这看起来相当愚蠢,但我正在使用我所知道的东西,而且除了这个问题之外,它大部分都有效。我愿意接受任何和所有的建议,特别是关于我的单元素数组被分割成单字符元素数组的问题。

谢谢!

最佳答案

当您选择多个复选框时,该值将按照您的预期作为字符串数组传递。但是,当您仅选择一个复选框时,该值将作为字符串而不是数组传递。

然后,您的代码会将字符串视为数组,这会导致您循环遍历各个字符。

您可以使用 Array.isArray() 来检查您是否正在处理数组,然后相应地调整代码以处理字符串。

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

您可以使用如下例所示的行将纯字符串放入数组中,从而无需对其他代码进行重大修改:

if(!Array.isArray(result)) result = [result];

关于javascript - 谷歌网络应用程序将单元素数组视为单个字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29019004/

相关文章:

javascript - 删除对象上的字段,然后删除从中克隆的对象上的字段

javascript - 逗号分隔符多维数组

javascript检测div类的存在,如果为真,则更改不同div的innerHTML

javascript - 音频标签,播放请求被新的加载请求中断

javascript - Foundation 5 下拉菜单在可滚动表格行中未对齐

javascript - 如何在 AngularJS 中迭代对象数组并打印键

javascript - 如何在 React 中从 JSON 创建动态表头?

javascript - 如何捕获 facebook "unlike"事件?

c# - 如何知道一个字符串只包含特定的单词

javascript - 匹配子字符串并删除数组元素