Jak mogę zamienić pierwszą literę każdego wyrazu na wielką literę w ciągu za pomocą JavaScript?

117

Próbuję napisać funkcję, która zamienia pierwszą literę każdego słowa w ciągu na wielką literę (konwertując ciąg na wielkość liter).

Na przykład, kiedy wejście jest "I'm a little tea pot", spodziewam "I'm A Little Tea Pot"się, że będzie wyjściem. Jednak funkcja zwraca "i'm a little tea pot".

To jest mój kod:

function titleCase(str) {
  var splitStr = str.toLowerCase().split(" ");

  for (var i = 0; i < splitStr.length; i++) {
    if (splitStr.length[i] < splitStr.length) {
      splitStr[i].charAt(0).toUpperCase();
    }

    str = splitStr.join(" ");
  }

  return str;
}

console.log(titleCase("I'm a little tea pot"));

slurrr
źródło
To nie wygląda na to, że pierwsza litera samego ciągu jest wielka. A może masz na myśli, że chcesz pisać wielką literą każde słowo zawarte w ciągu.
epascarello
2
Nie przypisujesz swojej kapitalizacji do wyniku, splitStr[i].charAt(0).toUpperCase();to będzie void. Musisz splitStr[i] = splitStr[i].charAt(0).toUpperCase() + splitStr[i].substring(1);
coś
1
Najpierw powinieneś nam powiedzieć. Co jest nie tak z tą funkcją? Jaki jest oczekiwany wynik i co w zamian zwraca?
Sebastian Simon
Wygląda na to, że ta funkcja próbuje użyć dużej litery w każdym słowie.
Halcyon
3
Jak mówi tytuł, próbuję zacząć pisać wielką literę każdego słowa w ciągu. Nie doceniam negatywnych opinii ani negatywnych opinii na forum, które ma mieć charakter wspierający. @somethinghere - Dziękuję za odpowiedź.
slurrr

Odpowiedzi:

166

Nie przypisujesz ponownie zmian do tablicy, więc wszystkie twoje wysiłki są daremne. Spróbuj tego:

function titleCase(str) {
   var splitStr = str.toLowerCase().split(' ');
   for (var i = 0; i < splitStr.length; i++) {
       // You do not need to check if i is larger than splitStr length, as your for does that for you
       // Assign it back to the array
       splitStr[i] = splitStr[i].charAt(0).toUpperCase() + splitStr[i].substring(1);     
   }
   // Directly return the joined string
   return splitStr.join(' '); 
}

document.write(titleCase("I'm a little tea pot"));

coś tutaj
źródło
@Halcyon To dałoby jedną literę na każde słowo.
epascarello
15
W es6 możesz to zrobić, co wygląda trochę ładniej:myStr.toLowerCase().split(' ').map(word => word.charAt(0).toUpperCase() + word.substring(1)).join(' ');
Patrick Michaelsen,
1
@PatrickMichaelsen Rzeczywiście możesz. Nie zmienię jednak odpowiedzi, pochodzi z 2015 roku i wiem, że czasy się zmieniły, ale utrzymam to dla potomności. Poza tym też nie pisałbym tego już w ten sposób :) Ale nie krępuj się opublikować swoją jako własną odpowiedź, jak sądzę?
coś tutaj
1
Tak, zgadzam się, obecna odpowiedź jest w porządku. Dlatego umieściłem to w komentarzach, po prostu w celach informacyjnych dla nowych gości.
Patrick Michaelsen
1
Porównałem tę funkcję z 3 funkcjami konkurencji i stwierdziłem, że jest ona najbardziej wydajna - mniej niż 1/3 czasu wykonania najgorszego konkurenta (Chrome 73). jsben.ch/AkHgP
Michael Thompson
92

Sprawiasz, że złożoność jest bardzo łatwa. Możesz dodać to w swoim CSS:

.capitalize {
    text-transform: capitalize;
}

W JavaScript możesz dodać klasę do elementu

 document.getElementById("element").className = "capitalize";
Marcos Pérez Gude
źródło
@epascarello Nie rozumiem cię, co mi mówisz?
Marcos Pérez Gude
pytanie brzmi „Co jest nie tak z tą funkcją?”, w przeciwnym razie byłby to duplikat stackoverflow.com/questions/1026069/… lub stackoverflow.com/questions/196972/…
Hacketo
2
dzięki za odpowiedź, ale próbuję to zrobić używając javascript do ćwiczeń @ MarcosPérezGude
slurrr
1
Tak, jest naprawdę wszechstronny
Marcos Pérez Gude
3
Niestety w niektórych przypadkach, jeśli wartość wynosi 20 mm i używasz dużej litery, będzie to 20 mm. W niektórych przypadkach javascript może być jedyną metodą.
Ale
79

Wersja ECMAScript 6 :

const toTitleCase = (phrase) => {
  return phrase
    .toLowerCase()
    .split(' ')
    .map(word => word.charAt(0).toUpperCase() + word.slice(1))
    .join(' ');
};

let result = toTitleCase('maRy hAd a lIttLe LaMb');
console.log(result);

Steve Brush
źródło
1
Myślę też, że brakuje ci toLowerCase()na samym początku, na wypadek gdyby użytkownik lub ciąg znaków był mieszany.
ArchNoob
45

Myślę, że ta droga powinna być szybsza; ponieważ nie dzieli łańcucha i nie łączy go ponownie; po prostu używając wyrażenia regularnego.

var str = text.replace(/(^\w{1})|(\s{1}\w{1})/g, match => match.toUpperCase());

Wyjaśnienie :

  1. (^\w{1}): dopasowuje pierwszy znak ciągu
  2. |: lub
  3. (\s{1}\w{1}): dopasuj jeden znak, który pojawił się po jednej spacji
  4. g: dopasuj wszystko
  5. match => match.toUpperCase (): zamień na może przyjąć funkcję, więc; zamień dopasowanie na dopasowanie wielkimi literami
nimeresam
źródło
1
O wiele czystsze!
Cliff Hall
Dlaczego \s{1}? Powiedziałbym \s+, że działa nawet z kilkoma spacjami między słowami
Cristian Traìna
W moim przypadku; to dokładnie 1 spacja i tak; powinno działać!
nimeresam
Ciągi znaków są niezmienne. regex będzie się dzielić i łączyć pod maską. Właściwie nie da się tego obejść.
bluegrounds
24

Jeśli możesz korzystać z biblioteki innej firmy, Lodash ma dla Ciebie funkcję pomocniczą.

https://lodash.com/docs/4.17.3#startCase

_.startCase('foo bar');
// => 'Foo Bar'

_.startCase('--foo-bar--');
// => 'Foo Bar'

_.startCase('fooBar');
// => 'Foo Bar'

_.startCase('__FOO_BAR__');
// => 'FOO BAR'
<script src="https://cdn.jsdelivr.net/lodash/4.17.3/lodash.min.js"></script>

waqas
źródło
19

W ECMAScript 6, jednowierszowa odpowiedź przy użyciu funkcji strzałki:

const captialize = words => words.split(' ').map( w =>  w.substring(0,1).toUpperCase()+ w.substring(1)).join(' ')
Anshuman Singh
źródło
3
Miły! Możesz użyć go, w[0]aby uczynić go jeszcze krótszym .. W przeciwieństwie do wyrażenia regularnego można go łatwo rozszerzyć o DOWOLNY symbol, ale nie tylko space. Przez dowolne mam na myśli ( [ ", ponieważ litery również powinny być pisane wielką literą po tych symbolach. Więc dziękuję za twoje rozwiązanie!
System Reboot
17

Shortest One Liner (również bardzo szybki):

 text.replace(/(^\w|\s\w)/g, m => m.toUpperCase());

Wyjaśnienie:

  • ^\w : pierwszy znak ciągu
  • | : lub
  • \s\w : pierwszy znak po spacji
  • (^\w|\s\w) Uchwyć wzór.
  • g Flaga: dopasuj wszystkie wystąpienia.

Jeśli chcesz się upewnić, że reszta jest zapisana małymi literami:

text.replace(/(^\w|\s\w)(\S*)/g, (_,m1,m2) => m1.toUpperCase()+m2.toLowerCase())
kurczaki
źródło
To jest super! RegEx są najlepsze. Czy możesz szerzej wyjaśnić, co robi ta część? m => m.toUpperCase()
marcin2x4
1
@ marcin2x4 mdopasowuje pierwszy znak, więc pierwsza litera jest wielka.
kurczaki
12

Wersja ECMAScript 6 :

title
    .split(/ /g).map(word =>
        `${word.substring(0,1).toUpperCase()}${word.substring(1)}`)
    .join(" ");
Arthur Clemens
źródło
6
Widziałem to dopiero teraz i jest całkiem fajne, ale myślę, że musisz dołączyć, używając " "zamiast "", w przeciwnym razie otrzymasz jedno duże słowo, nie?
coś tutaj
9

𝗙𝗮𝘀𝘁𝗲𝘀𝘁 𝗦𝗼𝗹𝘂𝘁𝗶𝗼𝗻 𝗙𝗼𝗿 𝗟𝗮𝘁𝗶𝗻-𝗜 𝗖𝗵𝗮𝗿𝗮𝗰𝘁𝗲𝗿𝘀

Możesz po prostu użyć funkcji wyrażenia regularnego, aby zmienić wielkość każdej litery. Dzięki optymalizacjom V8 JIST powinno to być szybkie i wydajne pod względem pamięci.

// Only works on Latin-I strings
'tHe VeRy LOOong StRINg'.replace(/\b[a-z]|['_][a-z]|\B[A-Z]/g, function(x){return x[0]==="'"||x[0]==="_"?x:String.fromCharCode(x.charCodeAt(0)^32)})

Lub jako funkcja:

// Only works for Latin-I strings
var fromCharCode = String.fromCharCode;
var firstLetterOfWordRegExp = /\b[a-z]|['_][a-z]|\B[A-Z]/g;
function toLatin1UpperCase(x){ // avoid frequent anonymous inline functions
    var charCode = x.charCodeAt(0);
    return charCode===39 ? x : fromCharCode(charCode^32);
}
function titleCase(string){
    return string.replace(firstLetterOfWordRegExp, toLatin1UpperCase);
}

Według tego benchmarku kod jest o ponad 33% szybszy niż następne najlepsze rozwiązanie w Chrome.


𝗗𝗲𝗺𝗼

<textarea id="input" type="text">I'm a little tea pot</textarea><br /><br />
<textarea id="output" type="text" readonly=""></textarea>
<script>
(function(){
    "use strict"
    var fromCode = String.fromCharCode;
    function upper(x){return x[0]==="'"?x:fromCode(x.charCodeAt(0) ^ 32)}
    (input.oninput = function(){
      output.value = input.value.replace(/\b[a-z]|['_][a-z]|\B[A-Z]/g, upper);
    })();
})();
</script>

Jack Giffin
źródło
Zapomniałeś dodać powrót do swojej funkcji, tak jak w: function autoCaps (string) {return string.replace (/ \ b [az] | \ B [AZ] / g, function (x) {return String.fromCharCode (x.charCodeAt (0) ^ 32);}); }
Archy
@Archy Dziękuję za twoją korektę. Dokonałem proponowanej zmiany.
Jack Giffin
9
text-transform: capitalize;

CSS to ma :)

Charlie OConor
źródło
6

Również dobra opcja (szczególnie jeśli używasz freeCodeCamp ):

function titleCase(str) {
  var wordsArray = str.toLowerCase().split(/\s+/);
  var upperCased = wordsArray.map(function(word) {
    return word.charAt(0).toUpperCase() + word.substr(1);
  });
  return upperCased.join(" ");
}
Cheyenne Crawford
źródło
5

Ta procedura obsługuje wyrazy z łącznikami i słowa z apostrofem.

function titleCase(txt) {
    var firstLtr = 0;
    for (var i = 0;i < text.length;i++) {
        if (i == 0 &&/[a-zA-Z]/.test(text.charAt(i)))
            firstLtr = 2;
        if (firstLtr == 0 &&/[a-zA-Z]/.test(text.charAt(i)))
            firstLtr = 2;
        if (firstLtr == 1 &&/[^a-zA-Z]/.test(text.charAt(i))){
            if (text.charAt(i) == "'") {
                if (i + 2 == text.length &&/[a-zA-Z]/.test(text.charAt(i + 1)))
                    firstLtr = 3;
                else if (i + 2 < text.length &&/[^a-zA-Z]/.test(text.charAt(i + 2)))
                    firstLtr = 3;
            }
        if (firstLtr == 3)
            firstLtr = 1;
        else
            firstLtr = 0;
        }
        if (firstLtr == 2) {
            firstLtr = 1;
            text = text.substr(0, i) + text.charAt(i).toUpperCase() + text.substr(i + 1);
        }
        else {
            text = text.substr(0, i) + text.charAt(i).toLowerCase() + text.substr(i + 1);
        }
    }
}

titleCase("pAt o'Neil's");
// returns "Pat O'Neil's";
Poklepać
źródło
4
function LetterCapitalize(str) { 
  return str.split(" ").map(item=>item.substring(0,1).toUpperCase()+item.substring(1)).join(" ")
}
Alex Varghese
źródło
4

let cap = (str) => {
  let arr = str.split(' ');
  arr.forEach(function(item, index) {
    arr[index] = item.replace(item[0], item[0].toUpperCase());
  });

  return arr.join(' ');
};

console.log(cap("I'm a little tea pot"));

Wersja do szybkiego odczytu, patrz test porównawczy http://jsben.ch/k3JVz enter image description here

starWave
źródło
4

Składnia ES6

const captilizeAllWords = (sentence) => {
  if (typeof sentence !== "string") return sentence;
  return sentence.split(' ')
    .map(word => word.charAt(0).toUpperCase() + word.slice(1))
    .join(' ');
}


captilizeAllWords('Something is going on here')
Anthony Awuley
źródło
Czy nie należy zastąpić słowa word.slice (1) słowem word.slice (1) .toLowerCase (), aby reszta nie była pisana wielkimi literami (na wypadek gdyby było to w oryginalnym zdaniu)?
Anton Krug,
4

Możesz używać nowoczesnej składni JS, która może znacznie ułatwić Ci życie. Oto mój fragment kodu dla danego problemu:

const capitalizeString = string => string.split(' ').map(item => item.replace(item.charAt(0), item.charAt(0).toUpperCase())).join(' ');
capitalizeString('Hi! i am aditya shrivastwa')

aditya shrivastwa
źródło
3

Zwykle wolę nie używać wyrażeń regularnych ze względu na czytelność, a także staram się trzymać z daleka od pętli. Myślę, że to jest czytelne.

function capitalizeFirstLetter(string) {
    return string && string.charAt(0).toUpperCase() + string.substring(1);
};
Linh Nguyen
źródło
3

Poniższa funkcja nie zmienia żadnej innej części ciągu niż próba konwersjiwszystkich pierwszych liter wszystkich słów (tj. Zgodnie z definicją wyrażenia regularnego \w+ ) na wielkie litery.

Oznacza to, że to jednak nie koniecznie konwersji słów Titlecase, ale robi dokładnie to, co tytuł pytanie mówi: „wielką literą każdego wyrazu w ciągu znaków - JavaScript”

  • Nie dziel łańcucha
  • określ każde słowo za pomocą wyrażenia regularnego, \w+które jest równoważne[A-Za-z0-9_]+
    • zastosuj funkcję String.prototype.toUpperCase()tylko do pierwszego znaku każdego słowa.
function first_char_to_uppercase(argument) {
  return argument.replace(/\w+/g, function(word) {
    return word.charAt(0).toUpperCase() + word.slice(1);
  });
}

Przykłady:

first_char_to_uppercase("I'm a little tea pot");
// "I'M A Little Tea Pot"
// This may look wrong to you, but was the intended result for me
// You may wanna extend the regex to get the result you desire, e.g., /[\w']+/

first_char_to_uppercase("maRy hAd a lIttLe LaMb");
// "MaRy HAd A LIttLe LaMb"
// Again, it does not convert words to Titlecase

first_char_to_uppercase(
  "ExampleX: CamelCase/UPPERCASE&lowercase,exampleY:N0=apples"
);
// "ExampleX: CamelCase/UPPERCASE&Lowercase,ExampleY:N0=Apples"

first_char_to_uppercase("…n1=orangesFromSPAIN&&n2!='a sub-string inside'");
// "…N1=OrangesFromSPAIN&&N2!='A Sub-String Inside'"

first_char_to_uppercase("snake_case_example_.Train-case-example…");
// "Snake_case_example_.Train-Case-Example…"
// Note that underscore _ is part of the RegEx \w+

first_char_to_uppercase(
  "Capitalize First Letter of each word in a String - JavaScript"
);
// "Capitalize First Letter Of Each Word In A String - JavaScript"

Edytuj 2019-02-07: Jeśli chcesz rzeczywistą literę tytułu (tj. Tylko pierwsza wielka litera, wszystkie pozostałe małe):

function titlecase_all_words(argument) {
  return argument.replace(/\w+/g, function(word) {
    return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
  });
}

Przykłady pokazujące oba:

test_phrases = [
  "I'm a little tea pot",
  "maRy hAd a lIttLe LaMb",
  "ExampleX: CamelCase/UPPERCASE&lowercase,exampleY:N0=apples",
  "…n1=orangesFromSPAIN&&n2!='a sub-string inside'",
  "snake_case_example_.Train-case-example…",
  "Capitalize First Letter of each word in a String - JavaScript"
];
for (el in test_phrases) {
  let phrase = test_phrases[el];
  console.log(
    phrase,
    "<- input phrase\n",
    first_char_to_uppercase(phrase),
    "<- first_char_to_uppercase\n",
    titlecase_all_words(phrase),
    "<- titlecase_all_words\n "
  );
}

// I'm a little tea pot <- input phrase
// I'M A Little Tea Pot <- first_char_to_uppercase
// I'M A Little Tea Pot <- titlecase_all_words

// maRy hAd a lIttLe LaMb <- input phrase
// MaRy HAd A LIttLe LaMb <- first_char_to_uppercase
// Mary Had A Little Lamb <- titlecase_all_words

// ExampleX: CamelCase/UPPERCASE&lowercase,exampleY:N0=apples <- input phrase
// ExampleX: CamelCase/UPPERCASE&Lowercase,ExampleY:N0=Apples <- first_char_to_uppercase
// Examplex: Camelcase/Uppercase&Lowercase,Exampley:N0=Apples <- titlecase_all_words

// …n1=orangesFromSPAIN&&n2!='a sub-string inside' <- input phrase
// …N1=OrangesFromSPAIN&&N2!='A Sub-String Inside' <- first_char_to_uppercase
// …N1=Orangesfromspain&&N2!='A Sub-String Inside' <- titlecase_all_words

// snake_case_example_.Train-case-example… <- input phrase
// Snake_case_example_.Train-Case-Example… <- first_char_to_uppercase
// Snake_case_example_.Train-Case-Example… <- titlecase_all_words

// Capitalize First Letter of each word in a String - JavaScript <- input phrase
// Capitalize First Letter Of Each Word In A String - JavaScript <- first_char_to_uppercase
// Capitalize First Letter Of Each Word In A String - Javascript <- titlecase_all_words
iolsmit
źródło
3
function titleCase(str) {

    var myString = str.toLowerCase().split(' ');
    for (var i = 0; i < myString.length; i++) {
        var subString = myString[i].split('');
        for (var j = 0; j < subString.length; j++) {
            subString[0] = subString[0].toUpperCase();
        }
        myString[i] = subString.join('');
    }

    return myString.join(' ');
}
thiagorls
źródło
1
Dodaj komentarze do swojej odpowiedzi.
HDJEMAI
3

Lub można to zrobić za pomocą funkcji replace () i zastępując pierwszą literę każdego słowa jego „upperCase”.

function titleCase(str) {
    return str.toLowerCase().split(' ').map(function(word) {
               return word.replace(word[0], word[0].toUpperCase());
           }).join(' ');
}

titleCase("I'm a little tea pot");
ntnbst
źródło
2

Oto, jak możesz to zrobić za pomocą mapfunkcji w zasadzie, robi to samo, co zaakceptowana odpowiedź, ale bez for-loop. W związku z tym oszczędza kilka wierszy kodu.

function titleCase(text) {
  if (!text) return text;
  if (typeof text !== 'string') throw "invalid argument";

  return text.toLowerCase().split(' ').map(value => {
    return value.charAt(0).toUpperCase() + value.substring(1);
  }).join(' ');
}

console.log(titleCase("I'm A little tea pot"));

Hamzeen Hameem
źródło
2

Poniżej znajduje się inny sposób zapisania wielkimi literami pierwszego alfabetu każdego słowa w ciągu.

Utwórz niestandardową metodę dla obiektu String przy użyciu prototype.

String.prototype.capitalize = function() {
    var c = '';
    var s = this.split(' ');
    for (var i = 0; i < s.length; i++) {
        c+= s[i].charAt(0).toUpperCase() + s[i].slice(1) + ' ';
    }
    return c;
}
var name = "john doe";
document.write(name.capitalize());
TayabRaza
źródło
1

Bardziej kompaktowe (i nowoczesne) przepisanie @ czegoś proponuje rozwiązanie:

let titleCase = (str => str.toLowerCase().split(' ').map(
                c => c.charAt(0).toUpperCase() + c.substring(1)).join(' '));
    
document.write(titleCase("I'm an even smaller tea pot"));

Dag Sondre Hansen
źródło
1

Surowy kod:

function capi(str) {
    var s2 = str.trim().toLowerCase().split(' ');
    var s3 = [];
    s2.forEach(function(elem, i) {
        s3.push(elem.charAt(0).toUpperCase().concat(elem.substring(1)));
    });
    return s3.join(' ');
}
capi('JavaScript string exasd');
Chris
źródło
powinieneś podać trochę więcej szczegółów (co było nie tak?)
śledzenie
1

Użyłem replace()z wyrażeniem regularnym:

function titleCase(str) {

  var newStr = str.toLowerCase().replace(/./, (x) => x.toUpperCase()).replace(/[^']\b\w/g, (y) => y.toUpperCase());

  console.log(newStr);
}

titleCase("I'm a little tea pot")
Eli Johnson
źródło
1

Tutaj znajduje się kompletne i proste rozwiązanie:

String.prototype.replaceAt=function(index, replacement) {
        return this.substr(0, index) + replacement+ this.substr(index
  + replacement.length);
}
var str = 'k j g           u              i l  p';
function capitalizeAndRemoveMoreThanOneSpaceInAString() {
    for(let i  = 0; i < str.length-1; i++) {
        if(str[i] === ' ' && str[i+1] !== '')
            str = str.replaceAt(i+1, str[i+1].toUpperCase());
    }
    return str.replaceAt(0, str[0].toUpperCase()).replace(/\s+/g, ' ');
}
console.log(capitalizeAndRemoveMoreThanOneSpaceInAString(str));
Alok Deshwal
źródło
Dlaczego zmieniasz String.prototype za każdym razem, gdy wywoływana jest ta metoda? Jeśli cokolwiek, musisz to zrobić raz , a najlepiej nigdy nie dotykać prototypów wbudowanych. To trochę nie, nie ...
coś tutaj
1
let str = "I'm a little tea pot";

str = str.toLowerCase();

i dodaj właściwość css text-transform: capitalize;do odpowiedniego elementu.

Kapilrc
źródło
0

Sprawdź poniższy kod.

function titleCase(str) {
  var splitStr = str.toLowerCase().split(' ');
  var nstr = ""; 
  for (var i = 0; i < splitStr.length; i++) {
    nstr +=  (splitStr[i].charAt(0).toUpperCase()+ splitStr[i].slice(1) + " 
    ");
  }
  console.log(nstr);
}

var strng = "this is a new demo for checking the string";
titleCase(strng);
Sunil Kumar
źródło
2
Dziękujemy za ten fragment kodu, który może zapewnić ograniczoną, natychmiastową pomoc. Właściwe wyjaśnienie byłoby znacznie poprawić swoją długoterminową wartość pokazując dlaczego jest to dobre rozwiązanie problemu, a byłoby bardziej użyteczne dla czytelników przyszłości z innymi, podobnymi pytaniami. Proszę edytować swoją odpowiedź dodać kilka wyjaśnień, w tym założeń już wykonanych.
iBug
0

Od ECMA2017 lub ES8

const titleCase = (string) => {
  return string
    .split(' ')
    .map(word => word.substr(0,1).toUpperCase() + word.substr(1,word.length))
    .join(' ');
};

let result = titleCase('test test test');
console.log(result);

Wyjaśnienie:
1. Najpierw przekazujemy ciąg znaków „test test test” do naszej funkcji „titleCase”.
2. Podzieliliśmy łańcuch na podstawie spacji, więc wynikiem pierwszej funkcji "split" będzie ["test", "test", "test"]
3. Gdy otrzymaliśmy tablicę, użyliśmy funkcji map do manipulowania każdym słowem w tablicy. Kapitalizujemy pierwszy znak i dodajemy do niego pozostały znak.
4. W ostatnim przypadku łączymy tablicę przy użyciu spacji, dzieląc ciąg przez sapce.

Pulkit Aggarwal
źródło
Myślę, że brakuje ci czegoś na samym początku przed rozdzieleniem i to jest toLowerCase().
ArchNoob
@ArchNoob, tak, możemy dodać toLowerCase () przed podziałem. Ale jest to całkowicie zależne od przypadku użycia, na przykład jeśli chcemy, aby wyjście "TeSt Test" dla wejścia "teSt test", w tym przypadku nie możemy dodać metody toLowerCase ().
Pulkit Aggarwal,
0

function titleCase(str) {
  //First of all, lets make all the characters lower case
  let lowerCaseString = "";
  for (let i = 0; i < str.length; i++) {
    lowerCaseString = lowerCaseString + str[i].toLowerCase();
  }
  //Now lets make the first character in the string and the character after the empty character upper case and leave therest as it is
  let i = 0;
  let upperCaseString = "";
  while (i < lowerCaseString.length) {
    if (i == 0) {
      upperCaseString = upperCaseString + lowerCaseString[i].toUpperCase();
    } else if (lowerCaseString[i - 1] == " ") {
      upperCaseString = upperCaseString + lowerCaseString[i].toUpperCase();
    } else {
      upperCaseString = upperCaseString + lowerCaseString[i];
    }
    i = i + 1;
  }
  console.log(upperCaseString);

  return upperCaseString;
}

titleCase("hello woRLD");

Hamza Dahmoun
źródło