Додайте текст до початку рядка


Відповіді:


214
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
@Rolf не найвірогідніше. Це, звичайно, повільніше, ніж prestring + 'original string';рішення.
Габріеле Петріолі

2
Перевага @GabrielePetrioli полягає в тому, що ви можете просто додати до точкового ланцюга (конвеєра). Ви навіть можете додати щось на зразок mystr.replace (/ $ /, 'від Габріелі'). Це може бути повільніше, але це саме те, що я шукав.
Матея Петрович

2
Можливо, це має бути новий стандарт: кожен пост також повинен містити відповідні XKCD.
Brett84c

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

30

Оскільки питання стосується того, який метод є найшвидшим , я подумав, що я хочу додати кілька перф-метрик.

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

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

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


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

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

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

14

ES6:

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

7
Хоча цей фрагмент коду може вирішити питання, зокрема пояснення дійсно допомагає покращити якість вашої публікації. Пам'ятайте, що ви відповідаєте на запитання читачів у майбутньому, і ці люди можуть не знати причини вашої пропозиції щодо коду. Будь ласка, намагайтеся не переповнювати свій код пояснювальними коментарями, це знижує читабельність і коду, і пояснень!
кайєс

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

8

ви також могли це зробити так

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

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

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.