Lodash title case (ตัวพิมพ์ใหญ่ตัวแรกของทุกคำ)


119

ฉันกำลังดูเอกสาร lodash และคำถาม Stack Overflow อื่น ๆ - ในขณะที่มีJavaScript ดั้งเดิมหลายวิธีในการทำงานนี้ให้สำเร็จมีวิธีใดบ้างที่ฉันสามารถแปลงสตริงเป็นตัวพิมพ์ใหญ่โดยใช้ฟังก์ชัน lodash อย่างหมดจด (หรืออย่างน้อยก็มีฟังก์ชัน prototypal ที่มีอยู่) เพื่อที่ฉันจะได้ไม่ต้องใช้นิพจน์ทั่วไปหรือกำหนดฟังก์ชันใหม่?

เช่น

This string ShouLD be ALL in title CASe

ควรจะเป็น

This String Should Be All In Title Case


4
คุณสามารถทำสิ่งเดียวกันจาก HTML ได้เช่นกันstyle = "text-transform: capitalize"
Chaudhary

คำตอบ:


229

สามารถทำได้ด้วยการปรับเปลี่ยนเล็กน้อยของstartCase:

_.startCase(_.toLower(str));


3
_.startCase("aaa BBB ccc") === "Aaa BBB Ccc"
แบรนดอน

2
ฉันชอบมัน. startCaseผมไม่ทราบเกี่ยวกับ
Brandon

1
.startCase ("camelString") === "Camel String" แต่ _.startCase ( .toLower ("camelString")) === "Camelstring" ดูเหมือนว่า lodash ต้องการเมธอด
titleCase

4
ฉันชอบสิ่งนี้ แต่มันลบตัวละครเช่น:นั่นคือปัญหาออกไป
JabberwockyDecompiler

1
ใช้ไม่ได้กับชื่อที่มีสำเนียง ("MartínezCortésPeña" ของสเปนกลายเป็น "Martinez Cortes Pena") หรือขีดกลาง ("Jean-Louis" ของฝรั่งเศสกลายเป็น "Jean Louis") เช่นเดียวกันกับฟังก์ชัน "* Case" ของ lodash
Flo

45
_.startCase(_.camelCase(str))

สำหรับข้อความที่ไม่ได้สร้างโดยผู้ใช้สิ่งนี้จะจัดการกับกรณีต่างๆมากกว่าคำตอบที่ยอมรับ

> startCase(camelCase('myString'))
'My String'
> startCase(camelCase('my_string'))
'My String'
> startCase(camelCase('MY_STRING'))
'My String'
> startCase(camelCase('my string'))
'My String'
> startCase(camelCase('My string'))
'My String'

31

กับ lodash เวอร์ชั่น 4.

_.upperFirst(_.toLower(str))


3
อันนี้ดีกว่าstartCaseเพราะสามารถจัดการตัวอักษรได้มากกว่า az เช่นå, äและö
Lars Nyström

3
upperFirst จะเปลี่ยนเฉพาะอักขระตัวแรกของคำแรกเท่านั้นไม่ใช่สำหรับคำที่ตามมา ฉันไม่เชื่อว่านี่จะดีกว่า startCase ด้วยเหตุผลเฉพาะนี้
Raghavan

16
'This string ShouLD be ALL in title CASe'
  .split(' ')
  .map(_.capitalize)
  .join(' ');

2
แน่นอนที่สุดกระชับชอบ เห็นได้ชัดว่ายังต้องแบ่งออกเป็นอาร์เรย์ แต่นั่นก็ยังเป็นวิธีแก้ปัญหาที่สั้นและไพเราะที่สุดจากสิ่งที่ฉันบอกได้ นอกจากนี้ตามปัญหา 1528 ที่ @AlexandreThebaldi ระบุอาจใช้upperFirstแทนcapitalize.
brandonscript

... แต่ _.startCase ชนะแน่นอน :)
brandonscript

5
_.startCaseลบเครื่องหมายวรรคตอน ตัวอย่าง_.startCase('first second etc...ส่งคืนสตริงFirst Second Etc
LuckyStarr

นี้เป็นที่ดีกว่าสำหรับกรณีการใช้งานของฉันเป็นstartCaseแปลงทุกอย่างที่จะว่างเปล่าเช่นuser_nameจะเป็นUser Nameและฉันต้องการเพียงUser_nameเช่นtext-transform: capitalizeทรัพย์สินของ CSS
gonzarodriguezt

7

คำถามนี้มีคำตอบหลายแบบ บางคนจะแนะนำให้ใช้ในขณะที่บางแนะนำ_.upperFirst_.startCase

รู้ความแตกต่างระหว่างพวกเขา

i) _.upperFirstจะแปลงตัวอักษรตัวแรกของสตริงของคุณจากนั้นสตริงอาจเป็นคำเดียวหรือหลายคำ แต่ตัวอักษรตัวแรกของสตริงของคุณจะเปลี่ยนเป็นตัวพิมพ์ใหญ่

_.upperFirst('jon doe')

เอาต์พุต:

Jon doe

ตรวจสอบเอกสารhttps://lodash.com/docs/4.17.10#upperFirst

ii) _.startCaseจะแปลงตัวอักษรตัวแรกของทุกคำในสตริงของคุณ

_.startCase('jon doe')

เอาต์พุต:

Jon Doe

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


ใช่ แต่สตริงกรณีแบบผสมล่ะ? ไม่มีของเหล่านี้จะทำให้จอน DoE 'เป็น 'จอนโด' _.lower()โดยไม่ต้อง
brandonscript

3

นี่เป็นวิธีที่ใช้เฉพาะวิธี lodash เท่านั้นและไม่มีวิธีการในตัว:

_.reduce(_.map(_.split("Hello everyOne IN the WOrld", " "), _.capitalize), (a, b) => a + " " + b)


0
 var s = 'This string ShouLD be ALL in title CASe';
 _.map(s.split(' '), (w) => _.capitalize(w.toLowerCase())).join(' ')

เว้นแต่ฉันจะพลาด lodash ไม่มีวิธีตัวพิมพ์เล็ก / ใหญ่ของตัวเอง


@vbotio ดูเหมือน_.upperFirstจะใช้กับอักขระตัวแรกเท่านั้น (คำพ้องความหมายสำหรับ_.capitalize()?)
brandonscript

1
capitalizeและupperFirstทำสิ่งที่แตกต่าง
Brandon

_.capitalize ใช้กับสตริงทั้งหมด
vbotio

0

ไม่กระชับเท่าคำตอบของ @ 4castle แต่มีคำอธิบายและเต็มไปด้วยอย่างไรก็ตาม ...

var basicTitleCase = _
    .chain('This string ShouLD be ALL in title CASe')
    .toLower()
    .words()
    .map(_.capitalize)
    .join(' ')
    .value()

console.log('Result:', basicTitleCase)
console.log('Exact Match:' , basicTitleCase === 'This String Should Be All In Title Case')
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.min.js"></script>


ฉันเดาว่าการใช้คำฟุ่มเฟือยและความยาวของคำตอบทำให้แทบไม่เป็นที่ต้องการ ฉันไม่ได้ลงคะแนน แต่มันจะไม่ใช่ตัวเลือกแรกของฉัน
brandonscript

0

นี่เป็นอีกวิธีหนึ่งสำหรับกรณีการใช้งานของฉัน: "กระดูกสันหลังของปีศาจ"

เพียงแค่:

function titleCase (str) {
  return _.map(str.split(' '), _.upperFirst).join(' ');
}

การใช้ startCase จะลบเครื่องหมายวรรคตอนดังนั้นฉันจึงต้องหลีกเลี่ยงข้อ จำกัด นั้น วิธีแก้ปัญหาอื่น ๆ ดูเหมือนจะค่อนข้างซับซ้อน ชอบแบบนี้เพราะสะอาดเข้าใจง่าย


0

สิ่งนี้สามารถทำได้ด้วย lodash เท่านั้น

properCase = string =>
        words(string)
            .map(capitalize)
            .join(' ');

const proper = properCase('make this sentence propercase');

console.log(proper);
//would return 'Make This Sentence Propercase'

คุณต้องใช้ตัวพิมพ์ใหญ่และคำจาก lodash
Justin Brown


ใช่ แต่คุณไม่ได้เรียกใช้ฟังก์ชันจาก lodash เว้นแต่คุณจะใช้นามแฝงพวกเขาอย่างใดvar words = ._words
brandonscript


-3

ด้วย lodash 4 คุณสามารถใช้ _.capitalize ()

_.capitalize('JOHN') มันส่งคืน 'John'

ดูรายละเอียดhttps://lodash.com/docs/4.17.5#capitalize


จะเป็นการดีที่จะทดสอบ use case สำหรับประโยคคำ สงสัยว่านี่ไม่ใช่ตัวพิมพ์ใหญ่ทั้งหมดของตัวอักษรแรกของแต่ละคำ
brandonscript

อันที่จริง 'ประโยค' ส่งออก 'ประโยค'
Andres Zapata
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.