Làm cách nào để viết hoa chữ cái đầu tiên của mỗi từ trong một chuỗi bằng JavaScript?


112

Tôi đang cố viết một hàm viết hoa chữ cái đầu tiên của mỗi từ trong một chuỗi (chuyển chuỗi thành chữ hoa tiêu đề).

Ví dụ, khi đầu vào là "I'm a little tea pot", tôi mong đợi "I'm A Little Tea Pot"là đầu ra. Tuy nhiên, hàm trả về "i'm a little tea pot".

Đây là mã của tôi:

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"));


Điều đó không giống như nó viết hoa chữ cái đầu tiên của một chuỗi. Hay bạn có nghĩa là bạn muốn viết hoa mỗi từ có trong chuỗi.
epascarello

2
Bạn không chỉ định cách viết hoa cho kết quả của mình, điều đó splitStr[i].charAt(0).toUpperCase();sẽ xảy ra void. Bạn cần phải làm splitStr[i] = splitStr[i].charAt(0).toUpperCase() + splitStr[i].substring(1);
gì đó

1
Bạn nên cho chúng tôi biết trước. Có gì sai với chức năng đó? Kết quả mong đợi là gì và thay vào đó nó trả về cái gì?
user4642212 15/09/15

Hàm này có vẻ như nó cố gắng viết hoa ký tự đầu tiên của mỗi từ.
Halcyon

2
Giống như tiêu đề cho biết, tôi đang cố viết hoa chữ cái đầu tiên của mỗi từ trong chuỗi. Tôi không đánh giá cao sự phản đối hoặc tiêu cực trên một diễn đàn được cho là mang tính chất ủng hộ. @somethinghere - Cảm ơn bạn đã phản hồi.
slurrr

Câu trả lời:


162

Bạn không gán lại các thay đổi của mình cho mảng, vì vậy mọi nỗ lực của bạn đều vô ích. Thử đi:

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"));


@Halcyon Điều đó sẽ chỉ dẫn đến một ký tự cho mỗi từ.
epascarello

14
Trong es6, bạn có thể làm được điều này, trông đẹp hơn một chút:myStr.toLowerCase().split(' ').map(word => word.charAt(0).toUpperCase() + word.substring(1)).join(' ');
Patrick Michaelsen

1
@PatrickMichaelsen Thật vậy, bạn có thể. Mặc dù vậy, tôi sẽ không thay đổi câu trả lời, nó có từ năm 2015 và tôi biết thời gian đã thay đổi nhưng tôi sẽ giữ nó cho hậu thế. Ngoài ra, tôi cũng sẽ không viết nó như thế này nữa :) Nhưng hãy đăng của bạn như câu trả lời của riêng bạn, tôi đoán?
cái gì đó ở đây

1
Vâng, tôi đồng ý, câu trả lời hiện tại là ổn. Đó là lý do tại sao tôi đưa nó vào phần bình luận, chỉ đơn giản là để tham khảo cho những khách mới hơn.
Patrick Michaelsen

1
Tôi đã chạy một điểm chuẩn của chức năng này so với 3 chức năng của đối thủ cạnh tranh và nhận thấy nó là chức năng hoạt động tốt nhất - ít hơn 1/3 thời gian thực thi của đối thủ cạnh tranh kém nhất (Chrome 73). jsben.ch/AkHgP
Michael Thompson

88

Bạn đang làm một điều rất dễ trở nên phức tạp. Bạn có thể thêm cái này vào CSS của mình:

.capitalize {
    text-transform: capitalize;
}

Trong JavaScript, bạn có thể thêm lớp vào một phần tử

 document.getElementById("element").className = "capitalize";

@epascarello Tôi không hiểu bạn, bạn đang nói gì với tôi?
Marcos Pérez Gude

câu hỏi là "Điều gì là sai với chức năng này?", nếu không đây sẽ là bản sao của stackoverflow.com/questions/1026069/... hoặc stackoverflow.com/questions/196972/...
Hacketo

1
cảm ơn bạn đã trả lời, nhưng tôi đang cố gắng thực hiện việc này bằng cách sử dụng javascript cho thực tế @ MarcosPérezGude
slurrr 15/09/15

1
Vâng, đó là linh hoạt thực
Marcos Pérez Gude

3
Thật không may trong một số trường hợp nếu giá trị là 20mm và bạn sử dụng viết hoa thì nó sẽ là 20Mm. Một số trường hợp javascript có thể là phương pháp duy nhất.
Buts

74

Phiên bản 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);


1
Tôi cũng nghĩ rằng bạn đã thiếu, toLowerCase()ngay từ đầu, chỉ trong trường hợp người dùng hoặc chuỗi là trường hợp hỗn hợp.
ArchNoob

42

Tôi nghĩ rằng cách này sẽ nhanh hơn; vì nó không tách chuỗi và nối lại; chỉ sử dụng regex.

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

Giải thích :

  1. (^\w{1}): khớp với ký tự đầu tiên của chuỗi
  2. |: hoặc là
  3. (\s{1}\w{1}): khớp với một ký tự đứng sau một dấu cách
  4. g: khớp với tất cả
  5. match => match.toUpperCase (): thay thế bằng hàm can take, so; thay thế đối sánh bằng đối sánh chữ hoa

1
Sạch sẽ hơn rất nhiều!
Cliff Hall

Tại sao \s{1}? Tôi muốn nói \s+, vì vậy nó hoạt động ngay cả khi có một số khoảng trắng giữa các từ
Cristian Traìna

Trong trường hợp của tôi; nó chính xác là 1 khoảng trắng, và có; nó sẽ hoạt động!
nimeresam

Chuỗi là bất biến. regex sẽ tách ra và kết hợp với nhau. Không có cách nào xung quanh nó thực sự.
bluegrounds

22

Nếu bạn có thể sử dụng thư viện của bên thứ ba thì Lodash có chức năng trợ giúp cho bạn.

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>


18

Trong ECMAScript 6, câu trả lời một dòng sử dụng hàm mũi tên:

const captialize = words => words.split(' ').map( w =>  w.substring(0,1).toUpperCase()+ w.substring(1)).join(' ')

3
Đẹp! Bạn có thể sử dụng w[0]để làm cho nó ngắn hơn nữa .. Không giống như regex, nó có thể dễ dàng mở rộng bằng BẤT KỲ biểu tượng nào nhưng không chỉ space. Ý tôi là ( [ ", vì các chữ cái cũng nên được viết hoa sau những biểu tượng này. Vì vậy, cảm ơn cho giải pháp của bạn!
Systems Rebooter

16

Shortest One Liner (cũng cực nhanh):

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

Giải trình:

  • ^\w : ký tự đầu tiên của chuỗi
  • | : hoặc là
  • \s\w : ký tự đầu tiên sau khoảng trắng
  • (^\w|\s\w) Chụp mẫu.
  • g Cờ: Khớp tất cả các lần xuất hiện.

Nếu bạn muốn đảm bảo phần còn lại là chữ thường:

text.replace(/(^\w|\s\w)(\S*)/g, (_,m1,m2) => m1.toUpperCase()+m2.toLowerCase())

Thật là tuyệt vời! RegEx là tốt nhất. Bạn có thể đánh giá thêm về những gì phần này làm được không? m => m.toUpperCase()
marcin2x4

1
@ marcin2x4 mkhớp với ký tự đầu tiên, vì vậy ký tự đầu tiên là chữ hoa.

10

Phiên bản ECMAScript 6 :

title
    .split(/ /g).map(word =>
        `${word.substring(0,1).toUpperCase()}${word.substring(1)}`)
    .join(" ");

6
Tôi chỉ thấy điều này bây giờ và nó khá gọn gàng, nhưng tôi nghĩ bạn cần phải tham gia bằng cách sử dụng " "thay vì "", nếu không bạn sẽ nhận được một từ lớn, không?
cái gì đó ở đây

9

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

Bạn có thể chỉ cần sử dụng một hàm biểu thức chính quy để thay đổi cách viết hoa của mỗi chữ cái. Với tối ưu hóa V8 JIST, điều này sẽ chứng tỏ là tốc độ nhanh và hiệu quả về bộ nhớ.

// 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)})

Hoặc, dưới dạng một hàm:

// 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);
}

Theo điểm chuẩn này , mã nhanh hơn 33% so với giải pháp tốt nhất tiếp theo trong 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>


Bạn quên thêm return vào hàm của mình như trong: function autoCaps (string) {return string.replace (/ \ b [az] | \ B [AZ] / g, function (x) {return String.fromCharCode (x.charCodeAt (0) ^ 32);}); }
Archy

@Archy Cảm ơn bạn đã chỉnh sửa. Tôi đã thực hiện thay đổi mà bạn đề xuất.
Jack Giffin


6

Cũng là một lựa chọn tốt (đặc biệt nếu bạn đang sử dụng 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(" ");
}

5

Quy trình này sẽ xử lý các từ được gạch nối và các từ có dấu lược.

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";

4
function LetterCapitalize(str) { 
  return str.split(" ").map(item=>item.substring(0,1).toUpperCase()+item.substring(1)).join(" ")
}

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"));

Phiên bản có thể đọc nhanh xem điểm chuẩn http://jsben.ch/k3JVz nhập mô tả hình ảnh ở đây


4

Cú pháp 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')

Không nên thay thế từ.slice (1) bằng word.slice (1) .toLowerCase () để đảm bảo phần còn lại không được viết hoa (đề phòng trường hợp nó nằm trong câu gốc)?
muni764

4

Bạn có thể sử dụng cú pháp JS hiện đại có thể giúp cuộc sống của bạn dễ dàng hơn nhiều. Đây là đoạn mã của tôi cho sự cố đã cho:

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


3

Tôi thường không thích sử dụng regexp vì tính dễ đọc và tôi cũng cố gắng tránh xa các vòng lặp. Tôi nghĩ đây là loại có thể đọc được.

function capitalizeFirstLetter(string) {
    return string && string.charAt(0).toUpperCase() + string.substring(1);
};

3

Hàm bên dưới không thay đổi bất kỳ phần nào khác của chuỗi ngoài việc cố gắng chuyển đổi tất cả các chữ cái đầu tiên của tất cả các từ (tức là theo định nghĩa regex \w+) thành chữ hoa.

Điều đó có nghĩa là nó không nhất thiết phải chuyển đổi các từ thành Titlecase, nhưng thực hiện chính xác những gì tiêu đề của câu hỏi nói: "Viết hoa chữ cái đầu tiên của mỗi từ trong một chuỗi - JavaScript"

  • Không chia chuỗi
  • xác định từng từ bằng regex \w+tương đương với[A-Za-z0-9_]+
    • chỉ áp dụng chức năng String.prototype.toUpperCase()cho ký tự đầu tiên của mỗi từ.
function first_char_to_uppercase(argument) {
  return argument.replace(/\w+/g, function(word) {
    return word.charAt(0).toUpperCase() + word.slice(1);
  });
}

Ví dụ:

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"

Chỉnh sửa 2019-02-07: Nếu bạn muốn Chữ tiêu đề thực tế (tức là chỉ viết hoa chữ cái đầu tiên tất cả các chữ thường khác):

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

Ví dụ hiển thị cả hai:

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

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(' ');
}

1
Thêm một số nhận xét cho câu trả lời của bạn.
HDJEMAI

3

Hoặc nó có thể được thực hiện bằng cách sử dụng Replace () và thay thế chữ cái đầu tiên của mỗi từ bằng "upperCase" của nó.

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");

2

Đây là cách bạn có thể làm điều đó với maphàm về cơ bản, nó hoạt động giống như câu trả lời được chấp nhận nhưng không có for-loop. Do đó, giúp bạn tiết kiệm được vài dòng mã.

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"));


2

Dưới đây là một cách khác để viết hoa bảng chữ cái đầu tiên của mỗi từ trong một chuỗi.

Tạo một phương thức tùy chỉnh cho một đối tượng Chuỗi bằng cách sử dụng 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());

1

Một bản viết lại nhỏ gọn hơn (và hiện đại hơn) về giải pháp được đề xuất của @ somethingthere:

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"));


1

Mã hàng:

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');

bạn nên cung cấp thêm một chút chi tiết (điều gì đã xảy ra?)
hering

1

Tôi đã sử dụng replace()với một biểu thức chính quy:

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")

1

Một giải pháp hoàn chỉnh và đơn giản ở đây:

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));

Tại sao bạn sửa đổi String.prototype mỗi khi phương thức này được gọi? Nếu có gì bạn cần làm một lần và tốt nhất là bạn không bao giờ chạm vào nguyên mẫu của các bản cài sẵn. Đó là một chút không-không ...
gì đó

0

Vui lòng kiểm tra mã bên dưới.

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);

2
Cảm ơn bạn về đoạn mã này, đoạn mã này có thể cung cấp một số trợ giúp hạn chế, tức thì. Một lời giải thích phù hợp sẽ cải thiện đáng kể giá trị lâu dài của nó bằng cách chỉ ra lý do tại sao đây là một giải pháp tốt cho vấn đề và sẽ khiến nó hữu ích hơn cho những người đọc trong tương lai với những câu hỏi tương tự khác. Vui lòng chỉnh sửa câu trả lời của bạn để thêm một số giải thích, bao gồm cả những giả định bạn đã đưa ra.
iBug

0

Kể từ ECMA2017 hoặc 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);

Giải thích:
1. Đầu tiên, chúng ta chuyển chuỗi "test test test" cho hàm "titleCase" của chúng ta.
2. Chúng tôi chia một chuỗi trên cơ sở không gian nên kết quả của hàm đầu tiên "split" sẽ là ["test", "test", "test"]
3. Khi chúng tôi có một mảng, chúng tôi đã sử dụng hàm ánh xạ để thao tác từng từ trong mảng. Chúng tôi viết hoa ký tự đầu tiên và thêm ký tự còn lại vào đó.
4. Cuối cùng, chúng ta nối mảng bằng cách sử dụng khoảng trắng khi chúng ta chia chuỗi bằng sapce.


Tôi nghĩ rằng bạn đang thiếu một cái gì đó ngay từ đầu trước khi tách ra và đó là toLowerCase().
ArchNoob

@ArchNoob, vâng, chúng ta có thể thêm toLowerCase () trước khi tách. Nhưng nó hoàn toàn phụ thuộc vào trường hợp sử dụng, chẳng hạn như nếu chúng ta muốn đầu ra "TeSt Test" cho đầu vào "teSt test", trong trường hợp này, chúng ta không thể thêm 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");


0

Ở đây tôi đã sử dụng ba chức năng toLowerCase(), toUpperCase()replace(regex,replacer)

function titleCase(str) { 
     return str.toLowerCase().replace(/^(\w)|\s(\w)/g, (grp) => grp.toUpperCase()); 
}

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.