2016-04-16 4 views
1

Wie extrahiere ich eindeutige Buchstabenvorkommen in einer Zeichenfolge, einschließlich aller Leerzeichen?Extrahieren Sie einzelne Zeichen aus einer Zeichenfolge mit Leerzeichen zwischen Zeichenfolgen

Das Problem mit meinem Code ist, dass es nur das erste Vorkommen des Raumes zurückgibt:

function unique_char(str1) { 
    var str = str1; 
    var uniql = ""; 
    for (var x = 0; x < str.length; x++) { 

    if (uniql.indexOf(str.charAt(x)) == -1) { 
     uniql += str[x]; 

    } 
    } 
    return uniql; 
} 
console.log(unique_char("the fox news newspaper")); 

diese Drucke zu trösten:

die foxnwspar

aber Meine gewünschte Ausgabe ist:

der Fuchs NWS par

Jede Hilfe geschätzt wird.

Dank

+1

nur prüfen, ob 'str.charAt (x)' ist ein Raum und überspringen Sie es. – Barmar

+0

Es funktioniert nicht .. in diesem Fall alle Leerzeichen aus der Zeichenfolge entfernt werden. – Mercury121

+0

Überprüfen Sie, ob es Leerzeichen ist und fügen Sie es ohne die 'indexOf()' Prüfung zuerst. – Barmar

Antwort

0

warum nicht einfach den platz entfernen?

function unique_char(str1) { 
 
    var str = str1.replace(/\s+/g, '');; 
 
    var uniql = ""; 
 
    for (var x = 0; x < str.length; x++) { 
 

 
    if (uniql.indexOf(str.charAt(x)) == -1) { 
 
     uniql += str[x]; 
 

 
    } 
 
    } 
 
    return uniql; 
 
} 
 
alert(unique_char("the fox news newspaper"));

0

I für die Verwendung von HashSets als Lookup gehen würde, ist O (1), anstelle von N als indexOf() ist. JavaScript hat ein nettes Objekt namens Set. Alternativ können Sie Objekte verwenden, da ihre Schlüssel von Natur aus eindeutig sind.

Für die eigentliche Frage, lassen Sie die Zeichen in der Zeichenfolge, die einen Raum (gleich ' ') ist

function unique_char(str1) { 
    var result = {}; 
    for (var i = 0; i < str1.length; i++) { 
    if (str1[i] != ' ') result[str1[i]] = 1; 
    } 
    return Object.keys(result).join(""); 
} 

console.log(unique_char("the fox news newspaper")); 
+0

das ist genial, aber ich denke, die Frage wollte Whitespace in der Ausgabe –

0

Sie können mit einem Leerzeichen init uniql und löschen Sie ihn am Ende

function unique_char(str1) { 
    var str = str1; 
    var uniql = " "; 
    for (var x = 0; x < str.length; x++) { 

    if (uniql.indexOf(str.charAt(x)) == -1) { 
    uniql += str[x]; 

    } 
} 
return uniql[1:]; 
} 
console.log(unique_char("the fox news newspaper")); 
2

hinzufügen logische OR zu überprüfen, ob das Zeichen Leerzeichen ist

if (uniql.indexOf(char) == -1 || char == ' ') 

Siehe unten Snippet Arbeits:

function unique_char(str) { 
 
    var uniql = ""; 
 
    for (var x = 0; x < str.length; x++) { 
 
     var char = str.charAt(x); 
 
     if (uniql.indexOf(char) == -1 || char == ' ') { 
 
      uniql += str[x]; 
 
     } 
 
    } 
 
    return uniql; 
 
} 
 
document.write(unique_char("the fox news newspaper"));

+1

erhalten Dies scheint wie die effizienteste Antwort für mich, weil nur eine Funktionsaufruf an 'str.charAt (x)' gemacht wird und nur eine Verwendung der Zuordnung 'uniql + = str [x]' –

1

wenn Sie versuchen, die Leerzeichen, überprüfen Sie zunächst, zu erhalten, wenn es ' ' ist, sonst dann prüfen, ob es einzigartig ist.

function unique_char(str1) { 
 
    var str = str1; 
 
    var uniql = ""; 
 
    for (var x = 0; x < str.length; x++) { 
 

 
    if (str.charAt(x) === ' '){ 
 
     uniql += str[x]; 
 
    } 
 
    else if (uniql.indexOf(str.charAt(x)) == -1) { 
 
     uniql += str[x]; 
 
    } 
 
    } 
 
    return uniql; 
 
} 
 
console.log(unique_char("the fox news newspaper"));

diese Drucke zu trösten:

der Fuchs NWS par

+0

Danke @Jeff Puckett II .. du hast mich gerettet. – Mercury121

0
if (uniql.indexOf(str.charAt(x)) == -1) { 
    uniql += (str[x] !== ' ') ? str[x] : ''; 
}