Javascript 在奇怪的数组中搜索精确匹配
我们有这样一个数组:Javascript 在奇怪的数组中搜索精确匹配,javascript,Javascript,我们有这样一个数组: let trapSt = ["i was sent = i sent", "to protect you = to find you"]; =只是一个分隔符,用于将第一个字符串与第二个字符串分开:字符串a=字符串B 我们有一个字符串变量,如下所示: let mainSt = 'i was sent'; 如果我们要搜索trapSt的第一个字符串,并将它们与mainSt进行比较并返回结果,该怎么办 如果存在精确匹配返回trapSt元素,如“i was sent=i sen
let trapSt = ["i was sent = i sent", "to protect you = to find you"];
=
只是一个分隔符,用于将第一个字符串
与第二个字符串分开:字符串a=字符串B
我们有一个字符串变量,如下所示:
let mainSt = 'i was sent';
如果我们要搜索trapSt
的第一个字符串
,并将它们与mainSt
进行比较并返回结果,该怎么办
- 如果存在精确匹配返回
元素,如trapSt
“i was sent=i sent”
- 如果没有精确匹配返回
false
- 似乎
和indexOf()
不能处理精确匹配includes()
- 我知道如何搜索整个
,但我不知道的是如何只搜索trapSt
第一个字符串
let trapSt=[“我被派去=我被派去”,“保护你=找到你”];
让主干='我被派去';
log(trapSt.map(e=>e.indexOf(mainSt));
log(trapSt.map(e=>e.includes(mainSt))
您可以.map
字符串数组,通过简单的.split
仅获取第一部分,然后可以迭代生成的字符串,查看其中一个是否与您想要的匹配
let trapSt=[“我被派去=我被派去”,“保护你=找到你”];
让主干='我被派去';
让firstStrings=trapSt.map(x=>x.split(“=”[0].trim())
for(设i=0;i }
您可以拆分字符串并对照所需字符串进行检查
let trapSt=[“我被派去=我被派去”,“保护你=找到你”];
让主干='我被派去';
console.log(trapSt.map(s=>s.split('=')[0]===mainSt&&mainSt))代码>1)使用循环在数组上迭代
2) 使用子字符串(0,trapSt[i].indexOf(“=”)-1)
获取第一个字符串
3) 使用includes
或indexOf
将搜索字符串与步骤2中得到的子字符串匹配。如果匹配,则保存循环的索引
4) 使用循环的索引获取整个字符串并返回trapSt[resIndex]
代码:
设i=0;
让主干='我被派去';
而(i
让findTrap=str=>{
让陷阱=[“我被派去=我被派去”,“保护你=找到你”];
设trapPairs=traps.map(s=>s.split('=');
让matchI=trapPairs.findIndex(([first])=>first==str);
返回陷阱[matchI]| |假;
}
log(findTrap(“我被发送”);
log(findTrap('to protect you');
log(findTrap('foo'))代码>使用find
而不是map()
。它返回与条件匹配的元素,而不是条件数组
您还应该使用startsWith()
而不是includes
,因此您只检查第一部分。并附加=
,以确保它与整个第一部分匹配
let trapSt=[“我被派去=我被派去”,“保护你=找到你”];
让主干='我被派去';
log(trapSt.find(e=>e.startsWith(mainSt+“=”)))代码>如果要像示例中那样使用map,则可以执行以下操作:
console.log(trapSt.map(e => e.substring(0,e.indexOf("=")-1).indexOf(mainSt)));
也许你可以使用正则表达式作为一个简单的选项
let trapSt = ["i was sent = i sent", "to protect you = to find you"];
let mainSt = 'i was sent';
let regex = new RegExp(`^(${mainSt}) ?=`);
let result = trapSt.map(t => {
let match = t.match(regex);
return match && match[0] && t.replace(match[0], '');
})
.find(r => !!r);
console.log(result);
我为您准备了工作样本:
我添加了更新精确匹配,只搜索第一个字符串是我的问题。。
let trapSt = ["i was sent = i sent", "to protect you = to find you"];
let mainSt = 'i was sent';
let regex = new RegExp(`^(${mainSt}) ?=`);
let result = trapSt.map(t => {
let match = t.match(regex);
return match && match[0] && t.replace(match[0], '');
})
.find(r => !!r);
console.log(result);