Сопоставление точных элементов массива с indexOf (регулярное выражение - массивы сопоставления границ) - PullRequest
0 голосов
/ 12 марта 2019

Я столкнулся с проблемой сопоставления массивов и строк, но обычный подход регулярных выражений (сопоставление границ), похоже, не работает в моем случае.

Нужно ли использовать разные границы слов илиу кого-нибудь есть более чистое решение?

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: Ссылка

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

Просто измените 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);
0 голосов
/ 12 марта 2019

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