我需要对函数进行一些修改,以允许在值的一行上搜索两个字符串。我正在尝试自己完成这项工作,但我需要一些帮助。这是查看单元格值的示例。假设没有前导或尾随的换行符。而且,所有单元格都具有相同的格式。相同的行数,相同的成员类型结构:最后一个,第一个,等等。
说我想看看此单元格是否包含名称为team lead
的{{1}}或名称为last2
的{{1}}。雇员的类型和姓名都将由用户输入。
我尝试使用在this的帮助下创建的以下内容。
Manager
它返回冒号之间(包括冒号)的内容的位置。然后我尝试了以下方法:
first4
这就是我被困住的地方。它将索引返回到第一行的最后一位。
我的想法是,如果冒号遵循用户输入的成员类型,则在冒号之间搜索用户输入的名称。我该怎么做?
说明:
最终目标是验证名称和成员类型是否在同一行上,并从我为indexOf(':(.*):')
构建的数组中排除。因此,如果它们在同一行上,则从列表中排除。
这是我将其添加到的功能:
flatUniqArr[0].search('Supervisor:')
.setHiddenValues()
是隐藏值的列表。 var flatUniqArr = colValueArr.map(function(e){return e[0].toString();})
.filter(function(e,i,a){
return (a.indexOf(e) == i && !(visibleValueArr.some(function(f){
return e.search(new RegExp(f,'i')) + 1;
})));
});
return flatUniqArr;
是一列值的数组。 flatUniqArr
是用户输入的名称,colValueArr
是成员类型。
尝试使用Liora解决方案:(已更新...现在可以使用)
visibleValueArr
现在可以使用。虽然看起来好像很多代码。如果它们是更快和/或更少的代码行,我将接受替代解决方案。
已更新:添加了memberType
,因为用户可以输入小写字母值。
答案 0 :(得分:1)
仅使用用户输入来构建正则表达式怎么样?
function search(line, employeeType, employeeName) {
var regexp = '/' + employeeType + ': ' + employeeName + '/'
return line.search(regexp)
}
或者更好的是,如果它总是出现在字符串的开头,只需使用startsWith()
答案 1 :(得分:1)
我假设所有行都采用这种格式。
如果用分隔符“:”分隔每一行
CONTRACT_ID NPV
0 1 90
1 2 130
2 3 105
...
那你就拥有
var array = value.split(":")
然后您可以检查每个名称
array[0] //the current role
array[1] //the list of name
array[2] //the email
带有行拆分的示例:
if(array[0] == "Team Lead" && array[1].indexOf("last2") != -1)