不确定为什么我的Google App脚本有时会返回“未定义”

时间:2017-06-22 14:30:20

标签: google-apps-script google-sheets

我编写了一个查看字符串的脚本,如果它包含已定义的单词或短语,则会返回相应的Google购物类别。但是,有时我的函数返回“undefined”,我不确定为什么。

我有一张工作表,其中包含我使用的所有不同的Google购物类别,另一张工作表,我将数据用于分析功能。

以下是返回“undefined”的值的示例:

正在分析的文字: Wall Hangings> Artwork&打印

返回值:未定义

我的代码:

//places the correct GS Category for specific item in column E:E
function placement() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('GSData');
  var values = sheet.getDataRange().getValues();
  for (i =1 ; i < values.length ; i++) {
    //checks to see if the cell is blank if it is blank it runs it through the category();
    if (values[i][4] === ""){      
      var gsCategory = category(values[i][3]);
      sheet.getRange(i+1,5).setValue(gsCategory);
    }
  }

  //checks the phrase and the finds the best suitable Category for the product
  function category(x) {
    //pulls in the Sheet data and sets it equal to the "cat" variable.
    var cat = categoryData();
    //search functions can be found on the search.gs file
    //find specific keywords in the phrase then return the correct corresponding GS category
    if(searchTowels(x)){
      return cat[76];
    }else if(searchWallHanging(x)){
      Logger.log(cat[39]);
      return cat[39];
    }else if(searchWesterDecor(x)){
      return cat[37];
    }else if(searchLamps(x)){
      return cat[66];
    }
  }
}

function categoryData() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('GSCategories');
  var values = sheet.getDataRange().getValues();
  return values;
}

function rawData() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('GSData');
  var values = sheet.getDataRange().getValues();
  return values;
}

我写了大量的其他if语句来涵盖我有产品的所有不同类别。但是,我不想将它们全部粘贴,因为它们会占用所有空间。

搜索功能:

function searchWallHanging(x) {
  if(x.search("Wall Hangings") > 0){
    return true; 
  }else {
    return false; 
  }

我只包含一个搜索功能以节省空间。

1 个答案:

答案 0 :(得分:1)

检查search()返回值。那里有一个明显的错误

function searchWallHanging(x) {
  if(x.search("Wall Hangings") > 0){
    return true; 
  }else {
    return false; 
}

我会给你3个字符串以及它将返回什么

  1. Purple Wall Hangings - 返回 TRUE
  2. Green Dress Robes - 返回 FALSE
  3. Wall Hangings Galore - 返回未定义
  4. 秘密在于:x.search("Wall Hangings") > 0因为search()将返回第一个匹配。因此,在我们的示例#3中,因为它以我们的查询字符串开头,我们得到的x.search("Wall Hangings") == 0 不是 > 0。轻松修复:

    function searchWallHanging(x) {
      if(x.search("Wall Hangings") >= 0){
        return true; 
      }else {
        return false; 
    }
    

    编辑:哦,是的,这适用于所有类似的搜索。如果您的所有功能都与上面的功能类似,那么您就不会充分利用这些功能。我们的想法是永远不要编写类似的代码块,以便您可能希望重新考虑特定位在不同类别之间的工作方式。