Ответ 1
Как насчет
Array(65537).join('x')
Обратите внимание, что это 65537, а не 65536, потому что вы помещаете символы между ними.
Я пишу блок-тесты JavaScript, и мне нужно создать строку длиной 65536. Какой лучший способ сделать это в JavaScript?
В настоящее время я использую:
var myString = '';
for (var i = 0; i <= 65535; ++i) {
myString += 'x';
}
Как насчет
Array(65537).join('x')
Обратите внимание, что это 65537, а не 65536, потому что вы помещаете символы между ними.
Это прогнозный ответ и не будет работать в текущих реализациях.
В ECMAScript 6 в настоящее время определяется метод String.prototype.repeat
. Это позволит вам сделать:
var result = "x".repeat(65535);
Опять же, это будущее дополнение. В настоящее время разрабатывается ECMAScript 6 (Гармония), и это можно технически удалить, хотя это вряд ли возможно.
Текущий проект:
15.5.4.21 String.prototype.repeat(count)
Выполняются следующие шаги:
- Пусть
O
beCheckObjectCoercible(this value)
.- Пусть
S
beToString(O)
.ReturnIfAbrupt(S)
.- Пусть
n
является результатом вызоваToInteger(count)
.ReturnIfAbrupt(n)
.- Если
n < 0
, то выведите исключение RangeError.- Если
n
-+Infinity
, тогда выведите исключение RangeError.- Пусть
T
значение aString
, которое сделано изn
копийS
, вместе взятых. Еслиn
-0
,T
- это пустая строка.- Возврат
T
.ПРИМЕЧАНИЕ 1. Этот метод создает строку, состоящую из строковых элементов этого объекта (преобразуется в String), повторяется время счета.
ПРИМЕЧАНИЕ 2 Функция повторения намеренно является общей; он не требует, чтобы это значение было объектом String. Поэтому оно может быть передано другим типам объектов для использования в качестве метода.
Array.prototype.join
не нужно вызывать в массиве, просто объект с свойством length (проверен в Google Chrome, FireFox, IE10)
function makeStr(len, char) {
return Array.prototype.join.call({length: (len || -1) + 1}, char || 'x');
}
makeStr(5); // "xxxxx"
Это позволяет вам использовать встроенную функцию, создающую строку, без накладных расходов огромного массива.
Из интереса я создал быстрый тестовый тест на jsperf.com:
Конкурсанты
Массив (x).join()
Array.prototype.join, отправленный Полом S.
strRepeat из underscore.string
function strRepeat(str, qty) {
if (qty < 1) return '';
var result = '';
while (qty > 0) {
if (qty & 1) result += str;
qty >>= 1, str += str;
}
return result;
}
strRepeat('*', 20000);
Вы можете создать массив длины, что хотите, а затем использовать метод join()
в массиве, который превратит его в строку. Array(number).join(char)
это создает массив размером number -1
. Также обратите внимание, что вы не хотите использовать свой метод, потому что конкатенация строк очень дорога (O (n) каждый concat). Я не уверен, что javascript имеет StringBuilder, например java