स्ट्रिंग की शुरुआत के लिए पाठ को प्राथमिकता दें


106

एक स्ट्रिंग की शुरुआत में एक नया मान जोड़ने के लिए सबसे तेज़ विधि क्या है?

जवाबों:


215
var mystr = "Doe";
mystr = "John " + mystr;

क्या यह काम आपके लिए नहीं होगा?


हालांकि यह समाधान उन डेवलपर्स के लिए "अक्षम" लग सकता है, जिन्हें अन्य भाषाओं में उपयोग किए जाने वाले ट्रिक्स का उपयोग किया गया है, यहां परीक्षण हैं, अन्य समाधानों की तुलना में: jsperf.com/prepend-text-to-string/5
metalim

प्रतीक्षा के रूप में + = काम नहीं करेगा या इसे अंत तक जोड़ देगा
JuicY_Burrito

2
@JuicY_Burrito +=पाठ के अंत में लागू होता है।
मार्क क्रेमर

127

आप इसे इस तरह से कर सकते हैं।

var mystr = 'is my name.';
mystr = mystr.replace (/^/,'John ');

console.log(mystr);

अस्वीकरण: http://xkcd.com/208/


रुको, एक स्थान से बचने के लिए भूल गया।  Wheeeeee [taptaptap] eeeeee।


13
मैं xkcd पट्टी के लिए इसे बढ़ाने के लिए परीक्षा में हूँ। उत्तम सामग्री! आपका सुरुचिपूर्ण समाधान शायद सबसे धीमा है, क्योंकि यह नियमित अभिव्यक्ति प्रोसेसर को त्वरित करता है।
रॉल्फ

13
@ रॉल्फ सबसे शायद नहीं। यह निश्चित रूप से prestring + 'original string';समाधान की तुलना में धीमा है ।
गेब्रियल पेट्रीओली

2
@GabrielePetrioli फायदा यह है कि आप बस अपनी डॉट चेन (पाइपलाइन) को जोड़ सकते हैं। आप कुछ भी जोड़ सकते हैं, जैसे कि मिस्ट्री .replace (/ $ /, 'गेब्रियल द्वारा')। यह धीमा हो सकता है लेकिन यह वही है जो मैं देख रहा था।
मतेजा पेत्रोविच

2
शायद यह नया मानक होना चाहिए: प्रत्येक पोस्ट में प्रासंगिक XKCD भी शामिल होना चाहिए।
Brett84c

1
किसी कारण से मैंने सोचा कि डेस्क पर कंप्यूटर वास्तव में एक बेसिनसेट में एक बच्चा था, और यह भी सोचा कि यह अजीब था कि लड़का बच्चे को मार रहा था।
२०:०

30

चूँकि सवाल यह है कि सबसे तेज़ तरीका क्या है , मैंने सोचा कि मैं कुछ परफेक्ट मेट्रिक्स जोड़ दूंगा।

TL; DR विजेता, एक बड़े अंतर से, +ऑपरेटर है, और कृपया रेगेक्स का उपयोग कभी न करें

https://jsperf.com/prepend-text-to-string/1

यहां छवि विवरण दर्ज करें


1
चूँकि हम प्रीपेंड का परीक्षण करना चाहते हैं , न कि केवल समवर्ती करना
metalim

@ मेटालिम, क्या नोटों का कोई भौतिक परिवर्तन था जो आपने परीक्षणों के लिए बनाया था? एक प्रीपेंड स्ट्रिंग स्ट्रिंग के आधे हिस्से का आदेश दिया गया है। इसके अलावा, jsPerf के लिए, आपको परीक्षण मामलों को लूप में फेंकने की आवश्यकता नहीं है; jsPerf स्कोर का बेसलाइन पाने के लिए प्रत्येक विधि को हजारों बार कॉल करता है। संपूर्ण परीक्षण विशेष परिदृश्यों का अनुकूलन करते हैं, और मुझे यकीन नहीं है कि यह 1,000 बार एक ही स्ट्रिंग को कैसे सामान्य करता है।
काइलमिट

यदि आप छोटी स्ट्रिंग को लंबी, या लंबी स्ट्रिंग से छोटी तक जोड़ते हैं, तो महत्वपूर्ण अंतर हो सकता है। चूँकि हम शॉर्ट स्ट्रिंग को मनमाने ढंग से स्ट्रिंग के लिए तैयार करने में रुचि रखते हैं , यही वह है जो परीक्षणों में किया जाता है: शॉर्ट स्ट्रिंग को लंबे समय तक बढ़ाने के लिए। लूप्स प्रत्यय स्ट्रिंग की 1000 अलग-अलग लंबाई का परीक्षण करने के लिए हैं, केवल कम या सिर्फ लंबे समय तक परीक्षण से बचने के लिए। @KyleMit, यदि आपके पास बेहतर विचार है, तो इसे अगले परीक्षण पुनरावृत्ति में लागू करने के लिए स्वतंत्र महसूस करें।
मेटलिम

14

ES6:

let after = 'something after';
let text = `before text ${after}`;

7
हालांकि यह कोड स्निपेट प्रश्न को हल कर सकता है, जिसमें स्पष्टीकरण सहित वास्तव में आपकी पोस्ट की गुणवत्ता में सुधार करने में मदद करता है। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और उन लोगों को आपके कोड सुझाव के कारणों का पता नहीं चल सकता है। कृपया व्याख्यात्मक टिप्पणियों के साथ अपने कोड को भीड़ने की कोशिश न करें, इससे कोड और स्पष्टीकरण दोनों की पठनीयता कम हो जाती है!
kayess

1
ईएस 6: स्ट्रिंग इंटरपोलेशन
ब्रायन ग्रेस

8

आप इसे इस तरह से भी कर सकते हैं

"".concat("x","y")

1
और क्यों नहीं "x" .concat ("y")? बस एक और स्ट्रिंग तात्कालिकता जोड़ने और इसे धीमा करने के लिए?
मेटालिम

6

यदि आप ईएस 2015 (उर्फ ईएस 6) नामक जावास्क्रिप्ट के संस्करण का उपयोग करना चाहते हैं, तो आप ईएस 2015 द्वारा शुरू किए गए टेम्प्लेट स्ट्रिंग्स का उपयोग कर सकते हैं और कुछ दिशानिर्देशों (जैसे एयरबीएनबी की स्टाइल गाइड ) द्वारा अनुशंसित हैं :

const after = "test";
const mystr = `This is: ${after}`;


0

आप उपयोग कर सकते हैं

var mystr = "Doe";
mystr = "John " + mystr;
console.log(mystr)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.