2017-06-20 1 views
1

Je dois créer une fonction pour vérifier si toutes les lettres de la deuxième chaîne d'un tableau à deux chaînes sont présentes dans la première chaîne. La fonction que j'ai écrite semble fonctionner pour la plupart des exemples que j'ai essayés avec elle mais ["bonjour", "hé"] retourne la vérité bien qu'il n'y ait pas de "y dans le salut" et je ne comprends pas pourquoi.Javascript Comment identifier si tous les éléments d'un tableau sont présents dans un autre

Voici mon code:

function mutation(arr) { 
    arr[0] =arr[0].toUpperCase().split(""); 
    arr[1] =arr[1].toUpperCase().split(""); 

    for(i=0;i<arr[1].length;i++){ 
    if(arr[0].indexOf(arr[1][i])>=0){ 
     return true; 
} else {return false;}}} 

mutation(["hello", "Hey"]); 
+3

en double possible de [Vérifiez si tous les éléments dans un tableau est dans un second réseau] (https: // stackoverflow. com/questions/8628059/check-if-every-element-in-one-array-is-in-a-second-array) –

Répondre

1

Vous retournerez vrai même si un personnage est adapté, Essayez ci-dessous le code vérifie si tous les caractères sont présents ou non

function mutation(arr) { 
    arr[0] = arr[0].toUpperCase().split(""); 
    arr[1] = arr[1].toUpperCase().split(""); 
    var count = 0; 

    for (i = 0; i < arr[1].length; i++) { 
     if (arr[0].indexOf(arr[1][i]) >= 0) { 
      count++; 
     } 

    } 

    return count === arr[1].length 

} 

mutation(["hello", "Hey"]); 
+1

Les blocs de code en eux-mêmes ne sont généralement pas des réponses utiles, et sont plus susceptibles d'attirer des downvotes. Veuillez * expliquer * quelle est la solution que vous montrez, et * pourquoi/comment * ce code répond à la question. –

0

ici est un plus efficace solution, cela ne fonctionne que pour les lettres minuscules.

(function(){ 
 

 
    function charCode(str, i){ 
 
     return str.charCodeAt(i) - 97; 
 
    } 
 

 
    function isMutation(a,b){ 
 
     const aArr = new Uint8Array(26); 
 
     const bArr = new Uint8Array(26); 
 
    
 
     let i=0; 
 
     let index = 0; 
 
     while(i<a.length){ 
 
      ++aArr[charCode(a, i)]; 
 
      ++i; 
 
     } 
 

 
     i = 0; 
 
     while(i<b.length){ 
 

 
      ++bArr[charCode(b, i)]; 
 
      ++i; 
 
     } 
 

 
     i = 0; 
 
     while(i < 26){ 
 
      if(!(aArr[i]===0 && bArr[i]===0 || aArr[i]>0 && bArr[i]>0)){ 
 
       return false 
 
      } 
 
      ++i; 
 
     } 
 
     return true; 
 
    } 
 

 
    console.assert(isMutation('hello', 'oleh') === true); 
 
    console.assert(isMutation('hello', 'hey') === false); 
 

 
})();

vous pouvez également comparer la somme de Uniq caractères dans les tableaux les deux, mais dans ce cas vous devez ajouter chaque lettre qu'une seule fois.

0

Je recommanderais d'utiliser l'une des solutions de code proposées par l'utilisateur georg au Remove Duplicates from JavaScript Array. Par exemple, la fonction ci-dessous peut être utilisée pour trier chaque matrice (arr[0] and arr[1]) et supprimer les doublons.

Crédit à l'utilisateur georg sur le lien ci-dessus.

function uniq(a) { 
    return a.sort().filter(function(item, pos, ary) { 
     return !pos || item != ary[pos - 1]; 
    }) 
} 

Une fois que vous avez trié/doublons supprimés, vous pouvez tester pour voir si les deux chaînes retournées sont égales ou non.

Bonjour => EHLO, et Hey => EHY

EHLO == EHY