【问题标题】:Matching exact array elements with indexOf (regex - boundary match arrays)使用 indexOf 匹配精确的数组元素(正则表达式 - 边界匹配数组)
【发布时间】:2019-03-12 15:12:39
【问题描述】:

我遇到了匹配数组和字符串的问题,但正常的正则表达式方法(边界匹配)似乎不适用于我的情况。

我需要使用不同的单词边界还是有人有更简洁的解决方案?

var nameArray = ['AA', 'BB', 'WBB'];
var idArray = ['AA','BB','CC'];

var counter=0;

for(var j=0; j<idArray.length;j++)
{
  for(var i=0; i<nameArray.length;i++)
  {
    if(nameArray[i].indexOf(idArray[j]) != -1) 
      counter++;
    
    /*
    if(nameArray[i].indexOf('/\b'+idArray[j]+'\b/') != -1) 
      counter++;
    */
    
    /*
    if('/\b'+nameArray[i]+'\b/'.indexOf(idArray[j]) != -1) 
      counter++;
    */   
      
  }
}

console.log(counter);

如您所见,检测到 3 个匹配项,但我需要它仅识别整个单词匹配项(在本例中为 2 个)。

循环和结构是必要的,因为我需要在我的项目中处理大型数组。

JSFiddle:Link

【问题讨论】:

  • 为什么不使用nameArray[j] == idArray[i]检查数组项的全部内容?
  • 您使用j 代表idArray,并使用i 代表nameArray,然后使用nameArray[j]idArray[i] ????
  • 如果nameArray[j] == idArray[i] 可以正常工作,否则可以用更多示例更新问题
  • @KoushikChatterjee 没注意到,把它们混在了测试脚本中,现在编辑了。

标签: javascript arrays regex loops indexof


【解决方案1】:

只需将 indexOf 更改为 ==

var nameArray = ['AA', 'BB', 'WBB'];
var idArray = ['AA', 'BB', 'CC'];

var counter = 0;

for (var j = 0; j < idArray.length; j++) {
  for (var i = 0; i < nameArray.length; i++) {
    if (nameArray[j] == idArray[i])
      counter++;

  }
}

console.log(counter);

【讨论】:

  • 谢谢,就像一个魅力。不知道为什么我之前没有想到这一点。
【解决方案2】:

var nameArray = ['AA', 'BB', 'WBB'];
var idArray = ['AA','BB','CC'];

const match = (source, target) => source.filter(value => target.includes(value)).length

console.log(match(nameArray, idArray))

【讨论】:

    猜你喜欢
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 2019-01-13
    • 2015-11-16
    • 2022-07-06
    • 2016-01-15
    相关资源
    最近更新 更多