8

Повторить строку в JavaScript заданное количество раз

9

В Perl я могу повторять символ несколько раз, используя следующий синтаксис:

$a = "a" x 10; // в результате получается "aaaaaaaaaa"

Существует ли простой способ сделать то же самое в Javascript? Я могу, конечно, использовать функцию, но мне было интересно, есть ли встроенный способ или какой-то другой хитрый метод для решения этой задачи.

5 ответ(ов)

0

Вы можете использовать следующий метод для повторения строки в JavaScript, даже если стандартный метод String.prototype.repeat недоступен:

String.prototype.repeat = String.prototype.repeat || function(n) {
  n = n || 1; // Если n не задано, устанавливаем по умолчанию 1
  return Array(n + 1).join(this); // Создаем массив и соединяем элементы
}

alert('Are we there yet?\nNo.\n'.repeat(10)); // Выводим строку 10 раз

В этом коде, если метод repeat не существует, мы добавляем его в прототип String. Метод принимает один аргумент n, который указывает, сколько раз нужно повторить строку. Если аргумент не передан, по умолчанию используется 1.

Используя Array(n + 1).join(this), мы создаем массив с размером, равным n + 1, и соединяем элементы, что позволяет эффективно повторять строку.

В приведенном примере строка 'Are we there yet?\nNo.\n' будет выведена в алерте десять раз.

0

В то время как наиболее голосуемый ответ немного компактней, с помощью этого подхода вам не нужно добавлять лишний элемент в массив.

Код Array(10).fill('a').join('') создает массив из 10 элементов, где каждый элемент содержит строку 'a', а затем объединяет их в одну строку. Это позволяет вам получить строку 'aaaaaaaaaa' без необходимости манипуляций с массивом после его создания.

0

Альтернативный способ:

for(var word = ''; word.length < 10; word += 'a'){}

Если вам нужно повторить несколько символов, просто умножьте ваше условие:

for(var word = ''; word.length < 10 * 3; word += 'foo'){}

ПРИМЕЧАНИЕ: Вам не нужно заходить на 1 символ больше, как в случае с word = Array(11).join('a').

0

Наиболее производительный способ реализации метода .repeat описан на сайте Mozilla: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat.

Краткая версия кода выглядит следующим образом:

String.prototype.repeat = function(count) {
    if (count < 1) return '';
    var result = '', pattern = this.valueOf();
    while (count > 1) {
        if (count & 1) result += pattern;
        count >>>= 1, pattern += pattern;
    }
    return result + pattern;
};
var a = "a";
console.debug(a.repeat(10));

Также, вот полифилл от Mozilla, который добавляет функцию .repeat в String.prototype, если она отсутствует:

if (!String.prototype.repeat) {
    String.prototype.repeat = function(count) {
        'use strict';
        if (this == null) {
            throw new TypeError('не удалось конвертировать ' + this + ' в объект');
        }
        var str = '' + this;
        count = +count;
        if (count != count) {
            count = 0;
        }
        if (count < 0) {
            throw new RangeError('число повторений должно быть неотрицательным');
        }
        if (count == Infinity) {
            throw new RangeError('число повторений должно быть меньше бесконечности');
        }
        count = Math.floor(count);
        if (str.length == 0 || count == 0) {
            return '';
        }
        if (str.length * count >= 1 << 28) {
            throw new RangeError('число повторений не должно превышать максимальный размер строки');
        }
        var rpt = '';
        for (;;) {
            if ((count & 1) == 1) {
                rpt += str;
            }
            count >>>= 1;
            if (count == 0) {
                break;
            }
            str += str;
        }
        return rpt;
    }
}

Этот полифилл обеспечивает корректную работу метода repeat на всех поддерживаемых платформах, включая обработку исключений и эффективность работы с большими строками.

0

Если вы не против использовать библиотеку в вашем проекте, вы можете воспользоваться функцией repeat из lodash. Эта функция позволяет дублировать строку заданное количество раз.

Пример использования:

_.repeat('*', 3);
// → '***'

Подробности можно найти в документации: lodash - repeat.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь