Как создать строку с n символами? Как создать строку с определенной длиной?

Я пишу блок-тесты JavaScript, и мне нужно создать строку длиной 65536. Какой лучший способ сделать это в JavaScript?

В настоящее время я использую:

var myString = '';
for (var i = 0; i <= 65535; ++i) {
    myString += 'x';
}

Ответы

Ответ 1

Как насчет

Array(65537).join('x')

Обратите внимание, что это 65537, а не 65536, потому что вы помещаете символы между ними.

Ответ 2

Это прогнозный ответ и не будет работать в текущих реализациях.

В ECMAScript 6 в настоящее время определяется метод String.prototype.repeat. Это позволит вам сделать:

var result = "x".repeat(65535);

Опять же, это будущее дополнение. В настоящее время разрабатывается ECMAScript 6 (Гармония), и это можно технически удалить, хотя это вряд ли возможно.

Текущий проект:

15.5.4.21 String.prototype.repeat(count)

Выполняются следующие шаги:

  • Пусть O be CheckObjectCoercible(this value).
  • Пусть S be ToString(O).
  • ReturnIfAbrupt(S).
  • Пусть n является результатом вызова ToInteger(count).
  • ReturnIfAbrupt(n).
  • Если n < 0, то выведите исключение RangeError.
  • Если n - +Infinity, тогда выведите исключение RangeError.
  • Пусть T значение a String, которое сделано из n копий S, вместе взятых. Если n - 0, T - это пустая строка.
  • Возврат T.

ПРИМЕЧАНИЕ 1. Этот метод создает строку, состоящую из строковых элементов этого объекта (преобразуется в String), повторяется время счета.

ПРИМЕЧАНИЕ 2 Функция повторения намеренно является общей; он не требует, чтобы это значение было объектом String. Поэтому оно может быть передано другим типам объектов для использования в качестве метода.

Ответ 3

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"

Это позволяет вам использовать встроенную функцию, создающую строку, без накладных расходов огромного массива.

Ответ 4

Из интереса я создал быстрый тестовый тест на jsperf.com:

http://jsperf.com/mkstring

Конкурсанты

  • Массив (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);

Ответ 5

Вы можете создать массив длины, что хотите, а затем использовать метод join() в массиве, который превратит его в строку. Array(number).join(char) это создает массив размером number -1. Также обратите внимание, что вы не хотите использовать свой метод, потому что конкатенация строк очень дорога (O (n) каждый concat). Я не уверен, что javascript имеет StringBuilder, например java