我正在尝试查找包含两个字符串匹配项的单元格的索引。例如,我有名字和姓氏。我需要找到一个包含这两个名字的单元格。
可能的名称组合如下:Jobs, Steve
或Jobs II, Steve
或Jobs, Steve Apple
或Jobs Jr, Steve Apple
。您明白了。
我需要返回包含名字和姓氏的第一个匹配单元格的索引。
以下是我的尝试。我的想法是先尝试找到与姓氏匹配的项,然后查看该匹配项是否也包含名字:
var firstName = 'Steve';
var lastName = 'Jobs';
var columnOfNamesArr = ['Participants','Wozniak, Steve','Gates, Bill','Cook, Tim','Jobs, Mark','Jobs, Steve Apple','Musk, Elon'];
var lastNameIndex = columnOfNamesArr.findIndex(s => s.indexOf(lastName) >= 0);
var nameIndex = columnOfNamesArr[lastNameIndex].findIndex(s => s.indexOf(firstName) >= 0);
var firstNameIndex
我在以...
开头的行上收到以下错误TypeError: Cannot read properties of undefined (reading 'indexOf')
我做错了什么,有没有办法通过一次搜索而不是两次搜索来完成所有操作?
编辑:添加有关如何columnOfNamesArr
创建的更多详细信息。
我拉取了如下的列:
參與者 |
---|
史蒂夫·沃兹尼亚克 |
盖茨、比尔 |
库克,蒂姆 |
乔布斯,马克 |
乔布斯,史蒂夫·苹果 |
马斯克、伊隆 |
我把它放入这样的变量中:
columnArr = namesSht.getRange('A1:A'+ LastRow).getValues();
然后我像这样压平:
var columnOfNamesArr = columnArr.map(r => r[0]);
那时我尝试findIndex
运行includes
var nameIndex = columnOfNamesArr.findIndex(s => s.includes(lastName) && s.includes(firstName));
但我收到了上面提到的错误代码。
在您显示的脚本中,
columnOfNamesArr[lastNameIndex]
是一个字符串值。当您想要使用 时findIndex
,需要使用数组。我认为这就是您当前问题的原因。如果您想在包含和columnOfNamesArr
时检索数组的第一个索引,那么以下修改如何?firstName
lastName
修改后的脚本:
当该脚本运行时,
5
会在日志中显示。笔记:
如果
firstName
和都lastName
包含在输入的数组中,并且您想要以数组的形式检索索引,那么如何进行以下修改?参考: