นำหน้าข้อความไปยังจุดเริ่มต้นของสตริง


คำตอบ:


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

สิ่งนี้จะไม่เหมาะกับคุณหรือ?


แม้ว่าโซลูชันนี้อาจดูเหมือน "ไม่มีประสิทธิภาพ" สำหรับนักพัฒนาที่คุ้นเคยกับกลเม็ดที่ใช้ในภาษาอื่น แต่นี่คือการทดสอบเปรียบเทียบกับโซลูชันอื่น ๆ : jsperf.com/prepend-text-to-string/5
metalim

รอจะไม่ใช้ + = ทำงานเช่นกันหรือจะเพิ่มต่อท้าย
JuicY_Burrito

2
@JuicY_Burrito +=ต่อท้ายข้อความ
Mark Kramer

127

ทำได้ด้วยวิธีนี้ ..

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

console.log(mystr);

ข้อจำกัดความรับผิดชอบ: http://xkcd.com/208/


เดี๋ยวก่อนลืมหนีช่องว่าง  วีวี่ [taptaptap] eeeeee.


13
ฉันอยากให้โหวตเรื่องนี้สำหรับแถบ xkcd ของเยี่ยม! โซลูชันที่สวยงามของคุณอาจช้าที่สุดเนื่องจากเป็นอินสแตนซ์โปรเซสเซอร์นิพจน์ทั่วไป
Rolf

13
@Rolf ไม่ได้มากที่สุด มันเป็นอย่างแน่นอนช้ากว่าprestring + 'original string';การแก้ปัญหา
Gabriele Petrioli

2
@GabrielePetrioli ข้อดีคือคุณสามารถเพิ่มลงใน dot chain (ไปป์ไลน์) ของคุณได้ คุณสามารถต่อท้ายบางอย่างได้เช่น mystr.replace (/ $ /, 'by Gabriele') มันอาจจะช้ากว่า แต่มันคือสิ่งที่ฉันกำลังมองหา
Mateja Petrovic

2
บางทีนี่อาจเป็นมาตรฐานใหม่: แต่ละโพสต์ต้องมี XKCD ที่เกี่ยวข้องด้วย
Brett84c

1
ด้วยเหตุผลบางอย่างฉันคิดว่าคอมพิวเตอร์บนโต๊ะทำงานเป็นเด็กทารกในเปลเด็กและยังคิดว่ามันแปลกที่ผู้ชายคนนั้นตีลูก
thedanotto

31

เนื่องจากคำถามเกี่ยวกับสิ่งที่เร็วที่สุดวิธีที่ฉันจึงคิดว่าฉันจะเพิ่มเมตริกที่สมบูรณ์แบบ

TL; DRผู้ชนะโดยระยะขอบกว้างเป็น+ผู้ดำเนินการและโปรดอย่าใช้ regex

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

ใส่คำอธิบายภาพที่นี่


1
เนื่องจากเราต้องการทดสอบคำนำหน้าไม่ใช่แค่เชื่อมต่อกันฉันจึงอัปเดตการทดสอบ: jsperf.com/prepend-text-to-string/5
metalim

@metalim มีการเปลี่ยนแปลงเนื้อหาของบันทึกที่คุณทำในการทดสอบหรือไม่? คำนำหน้าเป็นเพียงครึ่งหนึ่งของการเรียงลำดับสตริง นอกจากนี้สำหรับ jsPerf คุณไม่จำเป็นต้องโยนกรณีทดสอบในวง jsPerf เรียกแต่ละวิธีหลายพันครั้งเพื่อให้ได้คะแนนพื้นฐาน การทดสอบ Perf จะปรับสถานการณ์ให้เหมาะสมที่สุดและฉันไม่แน่ใจว่ามันมักจะนำหน้าสตริงเดียวกัน 1,000 ครั้ง
KyleMit

อาจมีความแตกต่างอย่างมีนัยสำคัญหากคุณต่อท้ายสตริงสั้นกับสตริงยาวหรือสตริงแบบยาวต่อท้ายสั้น เนื่องจากเรากำลังสนใจในการprependingสตริงสั้นสตริงพลว่าเป็นสิ่งที่จะทำในการทดสอบ: prepending สตริงสั้นที่เพิ่มขึ้นสตริงอีกต่อไป มีลูปเพื่อทดสอบความยาวของสตริงคำต่อท้ายที่แตกต่างกัน 1,000 รายการเพื่อหลีกเลี่ยงการทดสอบเพียงสั้นหรือยาว @KyleMit หากคุณมีแนวคิดที่ดีกว่านี้อย่าลังเลที่จะนำไปใช้ในการทดสอบซ้ำครั้งต่อไป
metalim

14

ES6:

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

7
แม้ว่าข้อมูลโค้ดนี้จะช่วยแก้ปัญหาได้ แต่คำอธิบายจะช่วยปรับปรุงคุณภาพของโพสต์ของคุณได้มาก โปรดจำไว้ว่าคุณกำลังตอบคำถามสำหรับผู้อ่านในอนาคตและบุคคลเหล่านั้นอาจไม่ทราบสาเหตุของการแนะนำโค้ดของคุณ โปรดพยายามอย่าเบียดโค้ดของคุณด้วยความคิดเห็นเชิงอธิบายซึ่งจะช่วยลดความสามารถในการอ่านโค้ดและคำอธิบาย!
kayess

1
ES6: String Interpolation
Bryan Grace

8

คุณสามารถทำได้ด้วยวิธีนี้

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

1
และทำไมไม่ "x" .concat ("y")? เพียงแค่เพิ่มการสร้างอินสแตนซ์สตริงอื่นและทำให้ช้าลง?
metalim

6

หากคุณต้องการใช้ Javascript เวอร์ชันที่เรียกว่า ES 2015 (aka ES6) หรือใหม่กว่าคุณสามารถใช้สตริงเทมเพลตที่แนะนำโดย ES 2015 และแนะนำโดยหลักเกณฑ์บางประการ (เช่นคู่มือสไตล์ของ Airbnb ):

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


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