重复字符N次

在Perl中,我可以使用以下语法多次重复一个字符:

$a = "a" x 10; // results in "aaaaaaaaaa"

有没有简单的方法可以在Javascript中完成此操作?我显然可以使用一个函数,但是我想知道是否有任何内置方法或其他一些巧妙的技术。

GreenStafan2020/03/12 10:45:00

Here is an ES6 version

const repeat = (a,n) => Array(n).join(a+"|$|").split("|$|");
repeat("A",20).forEach((a,b) => console.log(a,b+1))

ㄏ囧囧ㄟ2020/03/12 10:45:00
String.prototype.repeat = function (n) { n = Math.abs(n) || 1; return Array(n + 1).join(this || ''); };

// console.log("0".repeat(3) , "0".repeat(-3))
// return: "000" "000"
西门樱Eva2020/03/12 10:45:00

this is how you can call a function and get the result by the helps of Array() and join()

function repeatStringNumTimes(str, num) {
  // repeat after me
  return num > 0 ? Array(num+1).join(str) : "";
}

console.log(repeatStringNumTimes("a",10))

理查德凯2020/03/12 10:45:00

Can be used as a one-liner too:

function repeat(str, len) {
    while (str.length < len) str += str.substr(0, len-str.length);
    return str;
}
卡卡西小宇宙2020/03/12 10:45:00
var stringRepeat = function(string, val) {
  var newString = [];
    for(var i = 0; i < val; i++) {
      newString.push(string);
  }
  return newString.join('');
}

var repeatedString = stringRepeat("a", 1);
Eva伽罗2020/03/12 10:45:00

Another interesting way to quickly repeat n character is to use idea from quick exponentiation algorithm:

var repeatString = function(string, n) {
    var result = '', i;

    for (i = 1; i <= n; i *= 2) {
        if ((n & i) === i) {
            result += string;
        }
        string = string + string;
    }

    return result;
};
GO小胖2020/03/12 10:45:00

Here is what I use:

function repeat(str, num) {
        var holder = [];
        for(var i=0; i<num; i++) {
            holder.push(str);
        }
        return holder.join('');
    }
理查德理查德2020/03/12 10:45:00

For repeat a value in my projects i use repeat

For example:

var n = 6;
for (i = 0; i < n; i++) {
    console.log("#".repeat(i+1))
}

but be careful because this method has been added to the ECMAScript 6 specification.

JinJin宝儿2020/03/12 10:45:00
/**  
 * Repeat a string `n`-times (recursive)
 * @param {String} s - The string you want to repeat.
 * @param {Number} n - The times to repeat the string.
 * @param {String} d - A delimiter between each string.
 */

var repeat = function (s, n, d) {
    return --n ? s + (d || "") + repeat(s, n, d) : "" + s;
};

var foo = "foo";
console.log(
    "%s\n%s\n%s\n%s",

    repeat(foo),        // "foo"
    repeat(foo, 2),     // "foofoo"
    repeat(foo, "2"),   // "foofoo"
    repeat(foo, 2, "-") // "foo-foo"
);
老丝村村2020/03/12 10:45:00

在ES2015 / ES6中,您可以使用 "*".repeat(n)

因此,只需将其添加到您的项目中,就可以了。

  String.prototype.repeat = String.prototype.repeat || 
    function(n) {
      if (n < 0) throw new RangeError("invalid count value");
      if (n == 0) return "";
      return new Array(n + 1).join(this.toString()) 
    };
西门村村古一2020/03/12 10:45:00

对于所有浏览器

以下功能比接受的答案中建议的选项执行速度快得多:

var repeat = function(str, count) {
    var array = [];
    for(var i = 0; i < count;)
        array[i++] = str;
    return array.join('');
}

您将像这样使用它:

var repeatedString = repeat("a", 10);

要将此功能的性能与接受的答案中建议的选项的性能进行比较,请参阅此Fiddle此Fiddle以获得基准。

仅适用于现代浏览器

在现代浏览器中,您现在可以使用String.prototype.repeat方法执行此操作

var repeatedString = "a".repeat(10);

MDN上阅读有关此方法的更多信息

此选项甚至更快。不幸的是,它不适用于任何版本的Internet Explorer。表格中的数字指定了完全支持该方法的第一个浏览器版本:

在此处输入图片说明

樱L2020/03/12 10:45:00

在新的ES6和声中,您将具有重复执行此操作的本地方法ES6现在也仅是实验性的,此功能在Edge,FF,Chrome和Safari中提供

"abc".repeat(3) // "abcabcabc"

并且可以肯定的是,如果没有重复功能,则可以使用旧的 Array(n + 1).join("abc")