Я вижу несколько решений кода проекта .
Но есть ли регулярная реализация в JavaScript?
javascript
stringbuilder
Лиора
источник
источник
Ответы:
Если вам нужно написать код для Internet Explorer, убедитесь, что вы выбрали реализацию, которая использует соединения с массивами. Конкатенация строк с оператором
+
или+=
является чрезвычайно медленной в IE. Это особенно верно для IE6. В современных браузерах+=
это обычно так же быстро, как присоединение массивов.Когда мне приходится делать много конкатенаций строк, я обычно заполняю массив и не использую класс построителя строк:
Обратите внимание, что
push
методы принимают несколько аргументов.источник
[foo(), "bar", "baz"].join("");
, тоже работает.push
мог принять несколько аргументов. Случайные вещи, которые вы изучаете.Я только что проверил производительность на http://jsperf.com/javascript-concat-vs-join/2 . Контрольные примеры объединяют или присоединяют алфавит 1000 раз.
В современных браузерах (FF, Opera, IE11, Chrome) «concat» примерно в 4-10 раз быстрее, чем «join».
В IE8 оба возвращают примерно одинаковые результаты.
В IE7 «соединение», к сожалению, примерно в 100 раз быстрее.
источник
Нет, встроенной поддержки для построения строк нет. Вместо этого вы должны использовать конкатенацию.
Конечно, вы можете создать массив различных частей вашей строки и затем вызвать
join()
этот массив, но это зависит от того, как соединение реализовано в используемом вами интерпретаторе JavaScript.Я провел эксперимент, чтобы сравнить скорость
str1+str2
метода иarray.push(str1, str2).join()
метода. Код был прост:Я протестировал его в Internet Explorer 8 и Firefox 3.5.5, оба на Windows 7 x64.
В начале я тестировал на небольшом количестве итераций (несколько сотен, несколько тысяч наименований). Результаты оказались непредсказуемыми (иногда конкатенация строк занимала 0 миллисекунд, иногда - 16 миллисекунд, то же самое для объединения массивов).
Когда я увеличил счет до 50 000, результаты были разными в разных браузерах - в Internet Explorer конкатенация строк была быстрее (94 миллисекунды), а соединение было медленнее (125 миллисекунд), в то время как в Firefox соединение массивов было быстрее (113 миллисекунд), чем соединение строк (117 миллисекунд).
Затем я увеличил счет до 500'000. Теперь
array.join()
была медленнее , чем конкатенация строк в обоих браузерах: конкатенация был 937 мс в Internet Explorer, 1155 мс в Firefox, массив присоединиться 1265 в Internet Explorer и 1207 мс в Firefox.Максимальное число итераций, которое я мог протестировать в Internet Explorer, не имея «сценария занимает слишком много времени для выполнения», составило 850 000. Тогда Internet Explorer был 1593 для конкатенации строк и 2046 для соединения массивов, а Firefox имел 2101 для конкатенации строк и 2249 для соединения массивов.
Результаты - если количество итераций невелико, вы можете попробовать использовать его
array.join()
, поскольку в Firefox это может быть быстрее. Когда число увеличивается,string1+string2
метод быстрее.ОБНОВИТЬ
Я выполнил тест в Internet Explorer 6 (Windows XP). Процесс перестал отвечать немедленно и никогда не заканчивался, если я пробовал тестировать более 100 000 итераций. На 40000 итераций результаты были
Это означает, что если вам нужна поддержка Internet Explorer 6, выберите
array.join()
способ, который быстрее, чем конкатенация строк.источник
join()
является частью ECMAScript, и каждый его интерпретатор JavaScript реализует его. Почему это "зависит"?Этот код выглядит как маршрут, по которому вы хотите пойти, с несколькими изменениями.
Вы захотите изменить метод добавления так, чтобы он выглядел следующим образом. Я изменил его, чтобы принять число 0 и вернуть его,
this
чтобы вы могли связать свои добавления.источник
null
,false
пустые строки,undefined
илиNaN
.Версия JavaScript ECMAScript 6 (также известная как ECMAScript 2015) представила строковые литералы .
Обратите внимание, что обратные тики вместо одинарных кавычек заключают строку.
источник
В C # вы можете сделать что-то вроде
В JavaScript вы можете сделать что-то вроде
источник
{0}
заменяется, содержит{1}
.Для тех, кто заинтересован, вот альтернатива вызову Array.join:
Результатом, как и ожидалось, является строка 'foobar'. В Firefox этот подход превосходит Array.join, но опережает + конкатенация. Поскольку String.concat требует, чтобы каждый сегмент указывался в качестве отдельного аргумента, вызывающая сторона ограничена пределом количества аргументов, установленным исполняющим движком JavaScript. Посмотрите на документацию Function.prototype.apply () для получения дополнительной информации.
источник
Я определил эту функцию:
И может быть назван как C #:
Результат:
источник
Когда я обнаружил, что в JavaScript много конкатенации строк, я начинаю искать шаблоны. Handlebars.js работает довольно хорошо, сохраняя HTML и JavaScript более читабельным. http://handlebarsjs.com
источник
Как насчет
sys.StringBuilder()
попробовать следующую статью.https://msdn.microsoft.com/en-us/library/bb310852.aspx
источник