2016-02-24 4 views
9

Ich arbeite an ein wenig Code, der eine Zeichenfolge durchsucht und alle Buchstaben des Alphabets, die fehlen, zurückgibt. Das ist, was ich habe:Suche nach einer Zeichenfolge für fehlende Buchstaben des Alphabets 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); 
} 

Aber mit dem Testfall: findWhatsMissing ("d a b c");

Ergebnisse in allen Buchstaben, bevor d dem fehlenden Array hinzugefügt wird.

Jede Hilfe würde sehr geschätzt werden.

+1

's.replace()' sollte 's = s.replace()' sein. – brso05

+0

Sie überprüfen nur den ersten Buchstaben von 's' ...' s [j] 'ist immer' s [0] '. Sie sollten wahrscheinlich 2 Schleifen verwenden, wenn Sie es so machen wollen. Überprüfen Sie jeden Buchstaben von "s" für jeden Buchstaben von "a". – brso05

Antwort

7

Innerhalb Ihrer Schleife können Sie indexOf() verwenden, um zu sehen, ob der Buchstabe in Ihrer Eingabe vorhanden ist. So etwas würde funktionieren:

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

Hoffe, dass hilft! Sie können es in diesem JS Fiddle arbeiten sehen: https://jsfiddle.net/573jatx1/1/

+1

Aright! Ich danke dir sehr! –

2

Wie Adam Konieska sagt. So etwas wie dies funktioniert:

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

1. Regel der Buchung Code auf SO: versuchen Sie es zuerst. – zerkms

+0

Guter Punkt. Ich habe die a-Linie entfernt. Das ist nötig. –

2

Kann Array.prototype.filter() verwenden und innerhalb jeder Zeichenfolge Loopcheck 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

Wahrscheinlich braucht 's = s.replace (/ [^ a-zA-Z]/g," ");', das war im ursprünglichen Post fehlerhaft. –

+0

@AdamKonieska yup..thnx ... nicht bemerkt, dass – charlietfl

+0

@AdamKonieska es tatsächlich nicht benötigt. Der gesamte Ersatz könnte entfernt werden. – zerkms

2

verwenden, können Sie verwenden 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 ')));

oder zwei für Schleifen :

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

Dies benötigt wahrscheinlich s = s.replace (/ [^ a-zA-Z]/g, "") ;, das war im ursprünglichen Post fehlerhaft. –

+0

@AdamKonieska danke, habe das nicht bemerkt. – jcubic

Verwandte Themen