लोदाश शीर्षक मामला (हर शब्द का पहला अक्षर)


108

मैं लॉकेट डॉक्स और अन्य स्टैक ओवरफ्लो सवालों के माध्यम से देख रहा हूं - जबकि इस कार्य को पूरा करने के कई देशी जावास्क्रिप्ट तरीके हैं , क्या कोई ऐसा तरीका है जिससे मैं विशुद्ध रूप से लॉश कार्यों (या कम से कम मौजूदा प्रोटोटाइप कार्यों) का उपयोग करके एक स्ट्रिंग को शीर्षक मामले में बदल सकता हूं। ताकि मुझे एक नियमित अभिव्यक्ति का उपयोग न करना पड़े या एक नया कार्य परिभाषित न करना पड़े?

जैसे

This string ShouLD be ALL in title CASe

बन जाना चाहिए

This String Should Be All In Title Case


3
आप HTML से भी ऐसा ही कर सकते हैं, शैली = "टेक्स्ट-ट्रांसफॉर्म: कैपिटलाइज़"
चौधरी

जवाबों:


215

यह एक छोटे से संशोधन के साथ किया जा सकता है startCase:

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


3
_.startCase("aaa BBB ccc") === "Aaa BBB Ccc"
ब्रैंडन

2
मुझें यह पसंद है। मैं नहीं जानता था startCase
ब्रैंडन

1
.startCase ("कैमलस्ट्रिंग") === "कैमल स्ट्रिंग" लेकिन _.startCase ( .toLower ("कैमलस्ट्रिंग")) === "कैमलस्ट्रिंग" ऐसा लगता है जैसे लॉश को टाइटलैस विधि की आवश्यकता है
aristidesfl

4
मुझे यह पसंद है, हालांकि, यह पात्रों को हटा देता है जैसे कि :, यह एक समस्या है।
JabberwockyDecompiler

1
यह उच्चारण के साथ पहले नामों के लिए काम नहीं करता है (स्पेनिश "मार्टिनेज कोर्टेस पेना" "मार्टिनेज कोर्टेस पेना" बन जाता है) या हाइफ़न के साथ (फ्रेंच "जीन-लुई" "जीन लुई" बन जाता है)। एक ही lodash के किसी भी "* प्रकरण" कार्यों के लिए चला जाता है
फ़्लो

42
_.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'

27

लॉश संस्करण 4 के साथ।

_.upperFirst(_.toLower(str))


3
यह बेहतर है startCaseक्योंकि यह az से अधिक अक्षरों को संभाल सकता है, उदाहरण के लिए å, ä और ö।
लार्स Nyström

3
अपरफेस केवल पहले शब्द के पहले वर्ण को बदलेगा, बाद के शब्दों के लिए नहीं। मेरा मानना ​​है कि यह इस विशेष कारण के लिए शुरू से बेहतर है।
राघवन

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

1
निश्चित रूप से सबसे संक्षिप्त, यह पसंद है। जाहिर है अभी भी एक सरणी में विभाजन की आवश्यकता है, लेकिन यह अभी भी सबसे छोटा और सबसे प्यारा समाधान है जो मैं बता सकता हूं। इसके अलावा, इस मुद्दे पर 1528 कि @ एलेक्सैंड्रेब्लाडी ने संकेत दिया, शायद upperFirstइसके बजाय का उपयोग करना चाहिए capitalize
ब्रांडनस्क्रिप्ट

... लेकिन _.startCase निश्चित रूप से जीतता है :)
Brandonscript

5
_.startCaseविराम चिह्न हटाता है। उदाहरण _.startCase('first second etc...स्ट्रिंग लौटाता हैFirst Second Etc
LuckyStarr

यह मेरे उपयोग के मामले के लिए बेहतर था startCaseक्योंकि उदाहरण के लिए सब कुछ एक रिक्त स्थान में बदल जाता user_nameहै User Name, और मैं केवल CSS User_nameकी text-transform: capitalizeसंपत्ति चाहता था
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


हाँ, लेकिन मिश्रित मामले के बारे में क्या? इनमें से कोई भी 'जॉन डो' को 'जॉन डो' के बिना बनाएगा _.lower()
ब्रैंडनस्क्रिप्ट 5

3

यहाँ एक तरीका है केवल लॉश मेथड्स और कोई बिलियन मेथड्स का उपयोग करना:

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

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

आप अलग-अलग शब्दों को करने के लिए मानचित्र फ़ंक्शन को भी विभाजित कर सकते हैं


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

जब तक मैं इसे याद नहीं करता, तब तक लॉश के पास अपने निचले / ऊपरी मामले के तरीके नहीं होते।


@vbotio ऐसा लगता है कि _.upperFirstकेवल पहले चरित्र पर लागू होता है (एक पर्यायवाची _.capitalize()?)
ब्रैंडनस्क्रिप्ट

1
capitalizeऔर upperFirstअलग-अलग काम करते हैं।
ब्रैंडन

_.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>


मुझे लगता है कि उत्तर की लंबाई और लंबाई इसे लगभग अवांछनीय बनाती है। मैं नीचे नहीं गया, लेकिन यह मेरी पहली पसंद नहीं होगी।
ब्रैंडनस्क्रिप्ट

0

यहाँ मेरे उपयोग के मामले के लिए एक और समाधान है: "शैतान की रीढ़"

सीधे शब्दों में:

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

StartCase का उपयोग करने से एपोस्ट्रोफ दूर हो जाएगा, इसलिए मुझे उस सीमा के आसपास काम करना पड़ा। अन्य समाधान बहुत जटिल लग रहा था। मुझे यह पसंद है क्योंकि यह साफ है, समझने में आसान है।


0

यह केवल लॉश के साथ किया जा सकता है

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

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

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

आपको लताश से पूंजीकरण और शब्दों की आवश्यकता है।
जस्टिन ब्राउन


हां, लेकिन आप कार्य को लॉश से नहीं बुला रहे हैं; जब तक आप उन्हें किसी तरह var words = ._words
अलियास नहीं करते हैं


-3

लॉश 4 के साथ, आप _.capitalize () का उपयोग कर सकते हैं

_.capitalize('JOHN') यह 'जॉन' देता है

देखें https://lodash.com/docs/4.17.5#capitalize जानकारी के लिए


शब्दों के एक वाक्य के लिए उपयोग के मामले का परीक्षण करना अच्छा होगा। संदेह है कि यह प्रत्येक शब्द के सभी पहले अक्षरों को कैपिटल नहीं करता है।
ब्रांडनस्क्रिप्ट 5

वास्तव में, 'वाक्य' आउटपुट 'द वाक्य'
एंड्रेस जैपटा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.