使用Google App Script编码一个简单的网站
在Google工作表中有一个电子表格-2列-第一个具有名词和第二个描述性单词
谎言是这样的:
第1列-第2列
桌子-木
球-塑料
椅子-金属蓝色
我的代码在第二列中搜索关键字,并从第一列返回匹配项。当第2列中有一个单词时,它工作正常,但当第2列中有一个单词时,它就工作正常...因此,搜索“木材”返回表,搜索“塑料”返回球,但是搜索“金属”则不返回任何内容,而对于“蓝色”则相同
任何想法如何解决这个问题?
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返回完全匹配,你应该使用findIndex并传递一个函数来搜索关键字:
var position = Column2List.findIndex( s => s.indexOf(x) >= 0 )
如果要在某个索引后找到索引,切片将复制该数组,一种变通方法是在函数中添加条件: (s, i) => i >= index && s.indexOf(x) >= 0
但是,如果我对你的理解正确,则可以.filter
在上使用sheetData
:
sheetData.filter(r => r[1].indexOf(keyword) >= 0 )
感谢您的解决方案-它可以工作,但又给我带来了另一个问题...我需要循环运行以查找具有匹配关键字的所有行-我使用while {}和indexOf()我可以指定开始位置(已更新在从vefore找到的位置开始的每个循环中)-我无法弄清楚如何使findIndex从特定索引处开始搜索...我可以使用切片,我想是可以的,但是在1000多个行表中有十几个匹配结果,可能是一个真正的猪...
我改善了答案
谢谢-做到了!