सवाल मैं जावास्क्रिप्ट में स्ट्रिंग अपरकेस का पहला अक्षर कैसे बना सकता हूं?


मैं एक स्ट्रिंग अपरकेस का पहला अक्षर कैसे बना सकता हूं, लेकिन किसी अन्य पत्र के मामले को नहीं बदल सकता?

उदाहरण के लिए:

  • "this is a test" -> "This is a test"
  • "the Eiffel Tower" -> "The Eiffel Tower"
  • "/index.html" -> "/index.html"

2969
2018-06-22 08:25


मूल


बल देना एक प्लगइन कहा जाता है underscore.string इसमें यह और अन्य महान उपकरणों का एक गुच्छा शामिल है। - Aaron
किस बारे में: return str.replace(/(\b\w)/gi,function(m){return m.toUpperCase();}); - Muhammad Umer
सरल: string[0].toUpperCase() + string.substring(1) - dr.dimitru
एक पत्र पूंजीकृत बनाने के उत्तर के 3 पृष्ठ - Andrew
कृपया कोई मुझे बताएं कि यह सवाल इतना लोकप्रिय क्यों है !!! क्या मुझे कुछ समझ में नहीं आता है? उत्तर देने के लिए 4 के वोट? आखिर क्यों? - Nozar Safari


जवाब:


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

कुछ अन्य उत्तरों में संशोधन String.prototype (यह उत्तर भी प्रयोग किया जाता है), लेकिन मैं अब इसके खिलाफ रखरखाव के कारण सलाह दूंगा (यह पता लगाना मुश्किल है कि फ़ंक्शन को कहां जोड़ा जा रहा है prototype और यदि अन्य कोड एक ही नाम / ब्राउज़र का उपयोग करता है तो संघर्ष का कारण बन सकता है भविष्य में उसी नाम के साथ मूल कार्य जोड़ता है)।


4736
2018-06-22 08:30



सबस्ट्रिंग की तुलना में अधिक ब्राउज़रों में सबस्ट्रिंग समझा जाता है - mplungjan
karim79 में जोड़ने के लिए - यह शायद इसे एक समारोह बनाने के लिए ओवरकिल है क्योंकि जावास्क्रिप्ट फंक्शन रैपिंग के बिना वैरिएबल को वही काम करेगा। मुझे लगता है कि यह एक फ़ंक्शन का उपयोग करके अधिक स्पष्ट होगा, लेकिन इसके मूल अन्यथा, फ़ंक्शन रैपर के साथ इसे जटिल क्यों करें? - Ross
कोई बात नहीं...""[0].toUpperCase() विफल रहता है - Crisfole
क्या हमें स्लाइस (1) को कम करने के लिए भी नहीं करना चाहिए? - hasen
नहीं, क्योंकि ओपी ने यह उदाहरण दिया था: the Eiffel Tower -> The Eiffel Tower। इसके अलावा, समारोह कहा जाता है capitaliseFirstLetter नहीं capitaliseFirstLetterAndLowerCaseAllTheOthers। - ban-geoengineering


एक और ऑब्जेक्ट उन्मुख दृष्टिकोण:

String.prototype.capitalize = function() {
    return this.charAt(0).toUpperCase() + this.slice(1);
}

और तब:

"hello world".capitalize();  =>  "Hello world" 

1196
2017-07-20 15:51



मुझे यह समाधान पसंद है क्योंकि यह रूबी की तरह है, और रूबी मीठा है! :) मैं स्ट्रिंग के सभी अन्य अक्षरों को कम करता हूं ताकि यह रूबी की तरह काम करता हो: return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); - ma11hew28
इस पोस्ट-प्रोटोटाइप.जेएस दुनिया में, मूल वस्तुओं को बदलने या विस्तार करने का सुझाव नहीं दिया जाता है। - Ryan
@ आरएक्सजीएक्स - "विस्तार न करें" बूगीमैन अब मरने लग रहा है (भगवान का शुक्र है), और लोग अपने सिर को जेएसएंड से बाहर खींच रहे हैं और यह महसूस कर रहे हैं कि यह सिर्फ एक भाषा सुविधा है। सिर्फ इसलिए कि Prototype.js ने ऑब्जेक्ट को एक संक्षिप्त समय के लिए बढ़ाया है, इसका मतलब यह नहीं है कि मूल निवासी को खराब करना बुरा है। यदि आप किसी अज्ञात उपभोक्ता (जैसे एनालिटिक्स स्क्रिप्ट जैसे यादृच्छिक साइटों पर जाते हैं) के लिए कोड लिख रहे हैं, तो आपको यह नहीं करना चाहिए, लेकिन इसके अलावा यह ठीक है। - csuwldcat
@csuwldcat क्या होगा यदि आप जिस अन्य लाइब्रेरी का उपयोग कर रहे हैं, उसे आप जानते हुए बिना अपनी पूंजीकरण जोड़ते हैं? प्रोटोटाइप का विस्तार करना खराब रूप है, भले ही प्रोटोटाइप.जेएस ने किया या नहीं। ईएस 6 के साथ, इंट्रिनिक्स आपको अपना केक रखने और इसे खाने की अनुमति देगा। मुझे लगता है कि आप "बूगीमैन" को भ्रमित कर सकते हैं जो ईसीएमएएससीआरआईपीटी स्पेक का पालन करने वाले शिम बनाने वाले लोगों के लिए मर रहे हैं। ये शिम पूरी तरह से ठीक हैं क्योंकि एक और लाइब्रेरी जो एक शिम जोड़ती है, वैसे ही इसे लागू करेगी। हालांकि, अपने स्वयं के गैर-spec intrinsics जोड़ने से बचा जाना चाहिए। - Justin Meyer
विस्तारित मूल निवासी बेहद खराब अभ्यास है। भले ही आप कहते हैं "ओह, मैं कभी भी इस कोड का उपयोग किसी अन्य चीज़ के साथ नहीं कर रहा हूं", आप (या कोई और) शायद करेंगे। फिर वे कुछ अजीब गणित बग को समझने की कोशिश करने में तीन दिन व्यतीत करेंगे क्योंकि किसी ने आपकी अन्य लाइब्रेरी की तुलना में मुद्रा से निपटने के लिए संख्या.मोनी () बढ़ा दी है। गंभीरता से, मैंने यह एक बड़ी कंपनी में देखा है और मूल निवासी प्रोटोटाइप के साथ गड़बड़ कर पुस्तकालय देव को समझने के लिए किसी के समय डिबगिंग के लायक नहीं है। - phreakhead


सीएसएस में:

p:first-letter {
    text-transform:capitalize;
}

408
2017-07-17 14:06



ओपी एक जेएस समाधान मांग रहा है। - Antonio Max
$ ( '# Mystring_id') पाठ (स्ट्रिंग) .css ( 'पाठ को बदलने', 'कैपिटल')। - DonMB
इसके अतिरिक्त, यह केवल स्ट्रिंग के प्रदर्शन को प्रभावित करता है - वास्तविक मूल्य नहीं। यदि यह किसी रूप में है, उदाहरण के लिए, मान अभी भी सबमिट किया जाएगा। - dmansfield
ये है सवाल का जवाब नहीं!!! यह एक जेएस प्रश्न के लिए एक सीएसएस समाधान है। Downvote। तो सटीक उत्तरों के बारे में है, सिर्फ इसलिए कि आपको "समाधान" मिला है, यह "सही समाधान" नहीं बनाता है, और यह निशान से दूर है। - dudewad
यह जावास्क्रिप्ट संदर्भों में काम नहीं करेगा जिनके पास डोम / सीएसएस प्रतिपादन नहीं है (जैसे Node.js)। यह वास्तव में सवाल का जवाब देता है "मूल पत्र जावास्क्रिप्ट स्ट्रिंग को छोड़कर मैं पहले पत्र को कैसे पेश करूं जैसे कि यह वेब ब्राउज़र में अपरकेस था?" - jinglesthula


यहां लोकप्रिय उत्तर का संक्षिप्त संस्करण दिया गया है जो स्ट्रिंग को सरणी के रूप में मानकर पहला अक्षर प्राप्त करता है:

function capitalize(s)
{
    return s[0].toUpperCase() + s.slice(1);
}

अद्यतन करें:

नीचे दी गई टिप्पणियों के अनुसार यह आईई 7 या उससे नीचे में काम नहीं करता है।

अद्यतन 2:

कन्नी काटना undefined खाली तारों के लिए (देखें नीचे @ njzk2 की टिप्पणी), आप एक खाली स्ट्रिंग की जांच कर सकते हैं:

function capitalize(s)
{
    return s && s[0].toUpperCase() + s.slice(1);
}

235
2017-08-28 23:03



यह आईई <8 में काम नहीं करेगा, क्योंकि वे ब्राउज़र स्ट्रिंग इंडेक्सिंग का समर्थन नहीं करते हैं। आईई 8 स्वयं ही इसका समर्थन करता है, लेकिन केवल स्ट्रिंग अक्षर के लिए - स्ट्रिंग ऑब्जेक्ट्स के लिए नहीं। - Mathias Bynens
आंकड़े आईई रोएगा ... - joelvh
कौन परवाह करता है, आईई 7 बाजार 5% से कम है! और वे शायद आपकी ग्रैमा और ग्रैम्पा की पुरानी मशीन हैं। मैं छोटा कोड एफटीडब्ल्यू कहता हूं! - vsync
@ vsync आपके gremma और grempa में बहुत पैसा हो सकता है वे मेरी साइट पर खर्च करने के इच्छुक हैं ... - joshuahedlund
@vsync मेरा मतलब था कि आपके उपयोगकर्ता जनसांख्यिकी के आधार पर, कभी-कभी (हालांकि हम 2014 और उससे आगे के रूप में आभारी रूप से कम और कम) हालांकि आईई 7 जैसे पुराने ब्राउज़र का समर्थन करने के लिए लाभदायक है ... - joshuahedlund


यदि आप पोस्ट की गई कुछ अलग-अलग विधियों के प्रदर्शन में रूचि रखते हैं:

यहां आधारित सबसे तेज़ तरीके हैं यह jsperf परीक्षण (सबसे तेज़ से धीमे से आदेश दिया गया)।

जैसा कि आप देख सकते हैं, पहले दो तरीकों प्रदर्शन के संदर्भ में अनिवार्य रूप से तुलनीय हैं, जबकि परिवर्तन String.prototype प्रदर्शन के मामले में अब तक की सबसे धीमी गति से है।

// 10,889,187 operations/sec
function capitalizeFirstLetter(string) {
    return string[0].toUpperCase() + string.slice(1);
}

// 10,875,535 operations/sec
function capitalizeFirstLetter(string) {
    return string.charAt(0).toUpperCase() + string.slice(1);
}

// 4,632,536 operations/sec
function capitalizeFirstLetter(string) {
    return string.replace(/^./, string[0].toUpperCase());
}

// 1,977,828 operations/sec
String.prototype.capitalizeFirstLetter = function() {
    return this.charAt(0).toUpperCase() + this.slice(1);
}

enter image description here


135
2017-11-14 03:26



ऐसा लगता है कि प्रारंभिक कोड अंतर को भी नहीं बनाता है: jsperf.com/capitalize-first-letter-of-string/2 - user420667
प्रोटोटाइप का विस्तार न करने का एक और कारण। - cchamberlain
O_o ... प्रोटोटाइप के साथ इतना बुरा क्यों? - mvlabat
ध्यान दें, यह बदल रहा है .slice(1) साथ में .substr(1) प्रदर्शन को और भी बढ़ाएगा। - Przemek


एक और मामले के लिए मुझे पहले पत्र को कैपिटल करने और शेष को कम करने की आवश्यकता है। निम्नलिखित मामलों ने मुझे इस समारोह को बदल दिया:

//es5
function capitalize(string) {
    return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();
}
capitalize("alfredo")  // => "Alfredo"
capitalize("Alejandro")// => "Alejandro
capitalize("ALBERTO")  // => "Alberto"
capitalize("ArMaNdO")  // => "Armando"

// es6 using destructuring 
const capitalize = ([first,...rest]) => first.toUpperCase() + rest.join('').toLowerCase();

129
2017-07-19 18:17



"... लेकिन किसी अन्य पत्र के मामले को नहीं बदला"। यह ओपी से पूछे गए सवाल का सही जवाब नहीं है। - Carlos Muñoz
@ कार्लोसमुंजोज यदि आप उद्घाटन वाक्य पढ़ते हैं तो वह कहता है कि यह एक अलग मामले के लिए है। - TMH
@ टॉमहार्ट यही कारण है कि यह सवाल का समाधान नहीं है। यह एक टिप्पणी या एक और सवाल और जवाब होना चाहिए - Carlos Muñoz
मैं उस पर आपसे सहमत हूं, लेकिन मैं यहां देख रहा हूं कि बहुत से लोग इस जवाब को करने के लिए देख रहे हैं। - TMH


यहां सबसे अच्छे समाधान दिए गए हैं:

पहला समाधान सीएसएस में:

p {
  text-transform: capitalize;
}

दूसरा समाधान :

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

आप इसे भी जोड़ सकते हैं String.prototype तो आप इसे अन्य तरीकों से श्रृंखलाबद्ध कर सकते हैं:

String.prototype.capitalizeFirstLetter = function() {
    return this.charAt(0).toUpperCase() + this.slice(1).toLowerCase();
}

और इस तरह इसका इस्तेमाल करें:

'string'.capitalizeFirstLetter() // String

तीसरा समाधान:

function ucFirstAllWords( str )
{
    var pieces = str.split(" ");
    for ( var i = 0; i < pieces.length; i++ )
    {
        var j = pieces[i].charAt(0).toUpperCase();
        pieces[i] = j + pieces[i].substr(1).toLowerCase();
    }
    return pieces.join(" ");
}

107
2018-02-16 05:30



मुझे मिला string.replace(string[0], string[0].toUpperCase()); बहुत आसान होना - Gcap
बस एक सिर ऊपर - सीएसएस समाधान के साथ पाठ का चयन करते समय पूंजीकृत चरित्र को उबंटू (शायद अन्य ब्राउज़रों) पर क्रोम में दृष्टि से चुना नहीं जा सकता है। यह अभी भी चुना जाता है और यदि आप Ctrl + C दबाते हैं तो पाठ की प्रतिलिपि बनाई जाती है। - Andris
दूसरा समाधान, जैसा कि आपने लिखा है, शेष स्ट्रिंग लोअर केस बनाता है। इसे हटाने का मूल अनुरोध के करीब होगा। ("एफिल टॉवर" ई और टी पर पूंजीकरण रखता है) - Ward D.S.
1) दो कोलन नोटेशन का प्रयोग करें ::first-letter क्योंकि यह संस्करण CSS3 दर्शन के अनुरूप है जब यह उन कोलनों की बात आती है, 2) उपयोग करें .substring(…) बजाय .slice(…) क्योंकि इसमें बेहतर प्रदर्शन है, 3) ओपी अन्य सभी पात्रों को कम करना नहीं चाहता था, 4) उन वस्तुओं के प्रोटोटाइप को संशोधित न करें जिनके पास आपके स्वामित्व नहीं हैं - Przemek
आप अन्य उत्तरों को कम कर रहे हैं, यह जवाब है गलत। - fpg1503


var string = "hello world";
string = string.charAt(0).toUpperCase() + string.slice(1);
alert(string);

62
2017-07-17 06:23