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 )
在 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 )