Metni dizenin başına ekleyin


Yanıtlar:



127

Bu şekilde yapabilirsin ..

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

console.log(mystr);

feragatname: http://xkcd.com/208/


Bekle, bir boşluktan kaçmayı unuttum.  Wheeeeee [taptaptap] eeeeee.


13
Bunu xkcd şeridi için yükseltmek istiyorum. Harika şeyler! Zarif çözümünüz büyük olasılıkla daha yavaştır çünkü normal ifade işlemcisini somutlaştırır.
Rolf

13
@Rolf büyük ihtimalle değil. Öyle kesinlikle daha yavaş prestring + 'original string';çözümü.
Gabriele Petrioli

2
@GabrielePetrioli Avantajı, nokta zincirinize (pipeline) ekleme yapabilmenizdir. Mystr.replace (/ $ /, 'yazan Gabriele') gibi bir şey bile ekleyebilirsiniz. Daha yavaş olabilir ama tam olarak aradığım şey buydu.
Mateja Petrovic

2
Belki de yeni standart bu olmalıdır: her gönderi aynı zamanda ilgili XKCD'yi de içermelidir.
Brett84c

1
Bazı nedenlerden dolayı, masadaki bilgisayarın aslında beşikteki bir bebek olduğunu düşündüm ve ayrıca adamın bebeğe vurmasının garip olduğunu düşündüm.
thedanotto

31

Soru en hızlı yöntemin ne olduğu ile ilgili olduğundan, bazı mükemmel ölçümler ekleyeceğimi düşündüm.

TL; DR Kazanan, geniş bir farkla +operatördür ve lütfen asla regex kullanmayın

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

görüntü açıklamasını buraya girin


1
Biz testi istediğimiz için başına ekleme ve sadece concatenate, birkaç test güncelledik: jsperf.com/prepend-text-to-string/5
metalim

@metalim, testlerde yaptığınız notta önemli değişiklikler oldu mu? Başa eklenen, dize birleştirmenin yalnızca sıralı yarısıdır. Ayrıca jsPerf için test senaryolarını bir döngüye atmanıza gerek yoktur; jsPerf, puanların temelini almak için her yöntemi binlerce kez çağırır. Mükemmel testler belirli senaryoları optimize eder ve aynı dizeyi 1.000 kez başına ne kadar sık ​​kullandığından emin değilim.
KyleMit

Kısa dizeyi uzun dizeye veya uzun dizeyi kısaya eklerseniz önemli farklar olabilir. Kısa dizgeyi rasgele dizgeye önceden eklemekle ilgilendiğimiz için, testlerde yapılan budur: daha uzun dizgiye kısa dizgiyi önceden eklemek. Döngüler, yalnızca kısa veya uzun testlerden kaçınmak için son ek dizesinin 1000 farklı uzunluğunu test etmek için vardır. @KyleMit, daha iyi bir fikriniz varsa, bunu bir sonraki test yinelemesinde uygulamaktan çekinmeyin.
metalim

14

ES6:

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

7
Bu kod parçacığı soruyu çözebilirken, bir açıklama eklemek, yayınınızın kalitesini artırmaya gerçekten yardımcı olur. Gelecekte okuyucular için soruyu yanıtladığınızı ve bu kişilerin kod önerinizin nedenlerini bilmeyebileceklerini unutmayın. Lütfen kodunuzu açıklayıcı yorumlarla doldurmamaya çalışın, bu hem kodun hem de açıklamaların okunabilirliğini azaltır!
kayess

1
ES6: String Interpolation
Bryan Grace

8

bu şekilde de yapabilirsin

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

1
ve neden "x" .concat ("y") değil? Sadece başka bir dize örneği eklemek ve daha yavaş hale getirmek için mi?
metalim

6

Javascript'in ES 2015 (ES6 olarak da bilinir) veya sonraki bir sürümünü kullanmak istiyorsanız, ES 2015 tarafından tanıtılan ve bazı yönergeler tarafından önerilen şablon dizelerini kullanabilirsiniz (Airbnb'nin stil kılavuzu gibi ):

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


0

Kullanabilirsiniz

var mystr = "Doe";
mystr = "John " + mystr;
console.log(mystr)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.