Добавить текст в начало строки


Ответы:


217
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/


Подожди, забыл сбежать из места.  Уииеее [таптаптап] эеееее.


13
У меня есть соблазн проголосовать за это за полосу xkcd. Отличный материал! Ваше элегантное решение, скорее всего, будет медленнее, потому что оно создает экземпляр обработчика регулярных выражений.
Rolf

13
@Rolf, скорее всего, нет. Это, конечно, медленнее, чем prestring + 'original string';решение.
Габриэле Петриоли

2
@GabrielePetrioli Преимущество в том, что вы можете просто добавить в свою цепочку точек (конвейер). Вы даже можете добавить что-нибудь, например mystr.replace (/ $ /, 'by Gabriele'). Может быть и медленнее, но это именно то, что я искал.
Mateja Petrovic

2
Возможно, это должен быть новый стандарт: каждое сообщение также должно включать соответствующий XKCD.
Brett84c

1
по какой-то причине я подумал, что компьютер на столе на самом деле был младенцем в люльке, а также подумал, что это странно, что этот парень бил ребенка.
thedanotto

31

Поскольку вопрос заключается в том, какой метод самый быстрый , я подумал, что добавлю несколько показателей производительности.

TL; DR Победителем, с большим отрывом, является +оператор, и, пожалуйста, никогда не используйте регулярное выражение

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

введите описание изображения здесь


1
Поскольку мы хотим протестировать prepend , а не просто объединить, я обновил тесты: jsperf.com/prepend-text-to-string/5
metalim

@metalim, были ли какие-либо существенные изменения, внесенные вами в тесты? Преенд - это просто упорядоченная половина конкатенации строк. Кроме того, для jsPerf вам не нужно запускать тестовые примеры в цикле; jsPerf вызывает каждый метод тысячи раз, чтобы получить базовую оценку. Perf-тесты оптимизируют определенные сценарии, и я не уверен, насколько часто они добавляют одну и ту же строку 1000 раз.
KyleMit

Может быть значительная разница, если вы добавляете короткую строку к длинной или длинную строку к короткой. Поскольку мы заинтересованы в добавлении короткой строки к произвольной строке, в тестах это и делается: добавление короткой строки к увеличивающейся более длинной строке. Циклы предназначены для тестирования 1000 различных длин суффиксной строки, чтобы избежать тестирования только коротких или просто длинных. @KyleMit, если у вас есть идея получше, не стесняйтесь реализовать ее в следующей итерации теста.
metalim

14

ES6:

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

7
Хотя этот фрагмент кода может решить вопрос, включение объяснения действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причины вашего предложения кода. Также постарайтесь не загромождать свой код пояснительными комментариями, это снижает удобочитаемость как кода, так и пояснений!
kayess

1
ES6: String Interpolation
Брайан Грейс

8

вы также можете сделать это так

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

1
а почему не "x" .concat ("y")? Просто чтобы добавить еще один экземпляр строки и сделать его медленнее?
metalim

6

Если вы хотите использовать версию Javascript под названием ES 2015 (также известную как ES6) или более позднюю, вы можете использовать строки шаблона, представленные ES 2015 и рекомендованные некоторыми руководящими принципами (например , руководством по стилю Airbnb ):

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


0

Ты можешь использовать

var mystr = "Doe";
mystr = "John " + mystr;
console.log(mystr)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.