J'ai rencontré un problème avec la correspondance des tableaux et des chaînes, mais l'approche regex normale (correspondance des limites) ne semble pas fonctionner dans mon cas.

Dois-je utiliser des limites de mots différentes ou quelqu'un a-t-il une solution plus propre ?

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

Comme vous pouvez le voir, 3 correspondances sont détectées, mais j'en ai besoin pour ne reconnaître que les correspondances de mots entiers (donc 2 dans ce cas).

Les boucles et la structure sont nécessaires car je dois traiter de grands tableaux dans mon projet.

JSFiddle : Lien

0
Paul Costa 12 mars 2019 à 18:12

2 réponses

Meilleure réponse

Remplacez simplement indexOf par ==

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
Syed Mehtab Hassan 12 mars 2019 à 15:19
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))
0
AlexOwl 12 mars 2019 à 15:17