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