2016-02-24 17 views
9

Sto lavorando su un po 'di codice che cercherà attraverso una stringa e restituirà tutte le lettere dell'alfabeto che mancano. Questo è quello che ho:Ricerca di una stringa per lettere mancanti dell'alfabeto in javascript

function findWhatsMissing(s){ 
    var a = "abcdefghijklmnopqrstuvwxyz"; 
    //remove special characters 
    s.replace(/[^a-zA-Z]/g, ""); 
    s = s.toLowerCase(); 
    //array to hold search results 
    var hits = []; 

    //loop through each letter in string 
    for (var i = 0; i < a.length; i++) { 
     var j = 0; 
     //if no matches are found, push to array 
     if (a[i] !== s[j]) { 
       hits.push(a[i]); 
     } 
     else { 
      j++; 
     } 
    } 
    //log array to console 
    console.log(hits); 
} 

Ma utilizzando il banco di prova: findWhatsMissing ("D a b c");

Risultati in tutte le lettere prima di essere aggiunto alla matrice mancante.

Qualsiasi aiuto sarebbe molto apprezzato.

+1

's.replace()' dovrebbe essere 's = s.replace()'. – brso05

+0

Stai solo controllando la prima lettera di 's' ...' s [j] 'è sempre' s [0] '. Probabilmente dovresti usare 2 cicli se vuoi farlo in quel modo. Controlla ogni lettera di 's' per ogni lettera di' a'. – brso05

risposta

7

All'interno del loop, è possibile utilizzare indexOf() per verificare se la lettera è presente nel proprio input. Qualcosa del genere funzionerebbe:

for (var i = 0; i < a.length; i++) { 
    if(s.indexOf(a[i]) == -1) { hits.push(a[i]); } 
} 

Sperare che aiuti! Potete vederlo funzionare in questo JS Fiddle: https://jsfiddle.net/573jatx1/1/

+1

Aright! Grazie mille! –

2

Come dice Adam Konieska. Qualcosa di simile a questo lavoro:

function findWhatsMissing(s) { 
     var a = "abcdefghijklmnopqrstuvwxyz"; 
     s = s.toLowerCase(); 
     var hits = []; 
     for (var i = 0; i < a.length; i++) { 
      if(s.indexOf(a[i]) == -1) { hits.push(a[i]); } 
     } 

     console.log(hits); 
    } 

    findWhatsMissing("d a b c"); 
+2

Prima regola di pubblicazione del codice su SO: provalo prima. – zerkms

+0

Buon punto. Ho rimosso una linea. È necessario. –

2

Può usare Array.prototype.filter() e all'interno di ogni stringa di controllo del ciclo utilizzando indexOf()

function findWhatsMissing(s){ 
    var a = "abcdefghijklmnopqrstuvwxyz"; 
    //remove special characters 
    s = s.replace(/[^a-zA-Z]/g, ""); 
    s = s.toLowerCase(); 
    return a.split('').filter(function(letter){ 
     return s.indexOf(letter) === -1; 
    }); 
} 

alert(findWhatsMissing('d f v')) 
+0

Probabilmente ha bisogno di 's = s.replace (/ [^ a-zA-Z]/g," ");', che era errante nel post originale. –

+0

@AdamKonieska yup..thnx ... non ha notato che – charlietfl

+0

@AdamKonieska non ne ha realmente bisogno. L'intera sostituzione potrebbe essere rimossa. – zerkms

2

È possibile utilizzare indexOf:

function findWhatsMissing(s){ 
 
    var a = "abcdefghijklmnopqrstuvwxyz"; 
 
    //remove special characters 
 
    s = s.replace(/[^a-zA-Z]/g, ""); 
 
    s = s.toLowerCase(); 
 
    //array to hold search results 
 
    var hits = []; 
 

 
    //loop through each letter in string 
 
    for (var i = 0; i < a.length; i++) { 
 
     //if no matches are found, push to array 
 
     if (s.indexOf(a[i]) == -1) { 
 
       hits.push(a[i]); 
 
     } 
 
    } 
 
    //log array to console 
 
    return hits; 
 
} 
 
alert(JSON.stringify(findWhatsMissing(' d a b c ')));

o due per loops :

function findWhatsMissing(s){ 
 
    var a = "abcdefghijklmnopqrstuvwxyz"; 
 
    //remove special characters 
 
    s = s.replace(/[^a-zA-Z]/g, ""); 
 
    s = s.toLowerCase(); 
 
    //array to hold search results 
 
    var hits = []; 
 

 
    //loop through each letter in string 
 
    for (var i = 0; i < a.length; i++) { 
 
    //if no matches are found, push to array 
 
    var found = false; 
 
    for (var j = 0; j < s.length; j++) { 
 
     if (s[j] == a[i]) { 
 
     found = true; 
 
     break; 
 
     } 
 
    } 
 
    if (!found) { 
 
     hits.push(a[i]); 
 
    } 
 
    } 
 
    //log array to console 
 
    return hits; 
 
} 
 
alert(JSON.stringify(findWhatsMissing(' d a b c ')));

+0

Questo probabilmente ha bisogno di s = s.replace (/ [^ a-zA-Z]/g, "") ;, che era errante nel post originale. –

+0

@AdamKonieska ringrazia, non l'ho notato. – jcubic

Problemi correlati