indexof() 部分匹配问题

indexof() partial match issue

在 Google 应用程序脚本中编写一个简单的网站

在 google 中传播sheet sheet - 2 列 - 第一列有名词,第二列有描述性词

这是谎言:

列 1 - 列 2

table - 木头

球 - 塑料

椅子-金属蓝

我的代码在第 2 列中搜索关键字,returns 在第 1 列中搜索匹配项。当第 2 列中有一个单词时它工作正常,但当有更多单词时则不行...所以搜索 'wood' returns table,搜索 'plastic' returns 球,但搜索 'metal' returns 什么都没有,同样搜索 'blue'

有什么解决办法吗?

 function FilterResults(keyword){
  
  //connect with spreadsheet
  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("sheet1");
  var sheetData = ws.getRange(1,1,ws.getRange("A1").getDataRegion().getLastRow(),5).getValues();
  
  //create arrays of values from cells in each column   
   var Column1List = sheetData.map(function(r){return r[0]; });
   var Column2List = sheetData.map(function(r){return r[1]; });
   
   
   //make sure search tags are in string format
   var x = keyword.toString();
   
   //find 1st row(position) that has tag in it
   var position = Column2List.indexOf(x);
   
     if (position > -1){
   
   //if the search found a match return cell content according to row number
     return Column1List[position];
   }else{
     return "unavailable";
   }

你的问题在var position = Column2List.indexOf(x);行,indexOf returns完全匹配,你应该使用findIndex并传递一个函数来搜索你的关键字:

var position = Column2List.findIndex( s => s.indexOf(x) >= 0 )

编辑:

如果你想在某个索引之后查找索引,slice 会复制数组,解决方法是向函数添加条件:(s, i) => i >= index && s.indexOf(x) >= 0

但如果我理解正确的话,你可以简单地在 sheetData 上使用 .filter:

sheetData.filter(r => r[1].indexOf(keyword) >= 0 )