2016-11-27 7 views
4

Ich arbeite durch einige Probleme auf CoderByte. Das Ziel dieser Funktion besteht darin, eine Zeichenfolge zu verwenden und den ersten Buchstaben jedes Wortes zu groß zu schreiben. Zum Beispiel 'hello world' bis 'Hello World'. Ich kann nicht herausfinden, warum dieser Code mir 'hello world' und nicht 'Hello World' gibt. Ich kenne diese Zeile array[i][0] = array[i][0].toUpperCase(); ist das Problem, aber verstehe nicht, warum es nicht funktioniert. Ich habe eine alternative Lösung gefunden, aber ich frage mich, warum das nicht funktioniert hat. Vielen Dank für deine Hilfe!Ändern von Zeichenfolgen in einem Array - Javascript

function LetterCapitalize(str) { 
    var array = str.split(' '); 
    for (var i = 0; i < array.length; i++) { 
     array[i][0] = array[i][0].toUpperCase(); 
    } 
return array.join(''); 
} 

LetterCapitalize('hello world'); 
+1

Etwas von einer doppelten Frage sehen http://stackoverflow.com/questions/4878756/javascript- how-to-capitalize-first-letter-of-word-wie-a-2-word-city – Sane

+0

var outerCased = str.split ("") .map (funktion (item)) {return item.charAt (0) .toUpperCase() + item.sub (1)}). join ("") – JazzCat

+1

Mögliches Duplikat von [Wie erstelle ich den ersten Buchstaben eines String - Großbuchstabens in JavaScript?] (http://stackoverflow.com/questions/1026069/How-Do-ich-mache-den-ersten-Buchstaben-einer-Zeichenkette-oberen case-in-javascript) – Sreekanth

Antwort

0

Sie haben kein zweidimensionales Array erstellt. Kann die Referenz [0] nicht verwenden - muss Teilzeichenfolgen verwenden.

Beachten Sie den Unterschied zwischen substr (wobei der zweite Parameter eine Länge ist - wir wollen nur 1 Zeichen), und Teilzeichenfolge (wobei der zweite Parameter die Endposition ist - hier weggelassen und so zum Ende der Zeichenfolge).

function LetterCapitalize(str) { 
    var array = str.split(' '); 
    for (var i = 0; i < array.length; i++) { 
     var firstChar = array[i].substr(0,1).toUpperCase(); 
     if array[i].length == 1 
      array[i]=firstChar; 
     else 
      array[i]=firstChar + array[i].substring(1); 
    } 
    return array.join(' '); 
} 

LetterCapitalize('hello world'); 
+0

Korrekt. Besser wäre es aber auch, ein Beispiel zu geben, da "Teilstrings verwenden" eine allgemeine Aussage ist, die das OP möglicherweise nicht versteht. –

-1

Try this:

function LetterCapitalize(str) { 
     var array = str.split(' '); 
     for (var i = 0; i < array.length; i++) { 

      array[i] = array[i][0].toUpperCase()+array[i].slice(1); 

     } 
    return array.join(' '); 
    } 

LetterCapitalize('hello world'); 
1

Sie haben soeben reguläre Ausdrücke für diesen Fall verwenden können:

function LetterCapitalize(str) { 
 
    var regex = /(\b[a-z](?!\s))/g; 
 
    str = str.replace(regex, function(x) { 
 
     return x.toUpperCase(); 
 
    }); 
 

 
    console.log(str); 
 
} 
 

 
LetterCapitalize('hello world');

2

Das Problem ist, dass array[i] bezieht sich auf ein Faden. Jedoch strings are immutable in JavaScript, so schlägt dieser Vorgang fehl: array[i][0] = array[i][0].toUpperCase(). Sie können keine einzelnen Indizes für eine Zeichenfolge festlegen.

Um zu erreichen, was Sie wollen, müssen Sie eine neue Zeichenfolge mit dem ersten Buchstaben in Großbuchstaben erstellen. Hier ist eine Möglichkeit, es zu tun, von einem anderen SO post borgen:

function capitalizeFirstLetter(str) { 
    return str.charAt(0).toUpperCase() + str.slice(1); 
} 

function capitalizeAllWords(str) { 
    var words = str.split(' '); 
    return words.map(capitalizeFirstLetter).join(' '); 
} 

capitalizeAllWords('hello world'); 
+0

Ah ok Das habe ich nicht bemerkt. Vielen Dank für Ihre Hilfe – davysamp

0

A zu einem funktionalen Ansatz gehen:

var capitalize = function(str) { 
    return str.split(/\s+/) 
    .map(function(word) { 
     return word.charAt(0).toUpperCase() + word.slice(1); 
    }) 
    .join(' '); 
}; 

Als Bonus dieser Funktion erklärt auch \n (Newline) und \t (tab) Zeichen als Großbuchstaben.

1

Ein effektiver Weg, damit die .map Verwendung wäre zu umgehen() Funktion

function cap(string){ 
    return string.split(" ").map(function(word){ 
     return word.charAt(0).toUpperCase() + word.slice(1) 
    } 
} 

Und ein Schritt für Schritt Anleitung, um den Code:

.split (“„) macht eine Reihe durch Hinzufügen eines neuen Elements jedes Mal, wenn ein Leerzeichen vorhanden ist

.map() nimmt einen Wert, steckt es in eine Funktion und ändert das Ergebnis basierend auf dem, was die Funktion zurückgibt.

.charAt (0) erhält den ersten Buchstaben und .toUpperCase() nutzt es

.slice (1) jeden Buchstaben nach dem ersten Buchstaben erhält.

Cheers, TheGenieOfTruth

(auf mobilen Geschehen, so ist die Formatierung fleckige und Code ist nicht getestet)

Verwandte Themen