如何创建一个循环,能够显示“-”标记“x”次迭代?

21 浏览
0 Comments

如何创建一个循环,能够显示“-”标记“x”次迭代?

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

$a = "a" x 10; // 结果为 "aaaaaaaaaa"

在JavaScript中有没有简单的方法来实现这个功能?我当然可以使用一个函数,但我想知道是否有任何内置的方法或其他巧妙的技巧。

0
0 Comments

这篇文章主要讨论了在JavaScript中如何实现重复显示'-'符号的循环,并给出了一个实现的代码示例。但是,文章指出这种方法是一种不好的编程实践,因为它污染了内置对象的原型。为了解决这个问题,作者建议使用一个静态的辅助函数来实现重复显示符号的功能,函数的签名是repeat(str, n)。此外,还有Mozilla官方提供的ES6的polyfill,可以用来解决兼容性问题。最后,文章还提到了一些关于polyfill的讨论和一些评论。

根据文章的内容,我们可以总结出问题的原因是使用了一种不好的编程实践,即修改内置对象的原型。为了解决这个问题,可以使用静态的辅助函数来实现重复显示符号的功能,并引用Mozilla提供的polyfill来解决兼容性问题。

以下是文章的整理:

在JavaScript中,如果需要重复显示'-'符号,可以使用以下代码:

String.prototype.repeat = String.prototype.repeat || function(n){
  n= n || 1;
  return Array(n+1).join(this);
}
alert(  'Are we there yet?\nNo.\n'.repeat(10)  )

然而,这种方法是一种不好的编程实践,因为它污染了内置对象的原型。更好的解决方法是使用一个静态的辅助函数来实现重复显示符号的功能,函数的签名是`repeat(str, n)`。以下是一个示例代码:

function repeat(str, n) {
  var result = '';
  for (var i = 0; i < n; i++) {
    result += str;
  }
  return result;
}
console.log(repeat('-', 10));

另外,为了解决兼容性问题,可以使用Mozilla提供的ES6的polyfill。可以在[这个链接](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat)中找到官方的polyfill。

总之,为了实现重复显示'-'符号的循环,我们应该避免修改内置对象的原型,而是使用一个静态的辅助函数或者引用官方提供的polyfill来实现这个功能。这样可以避免不好的编程实践,并提高代码的可读性和可维护性。

0
0 Comments

在ES6中,可以使用String的repeat方法来实现这个功能。不过需要注意的是,ES6目前还处于实验阶段,而且该功能在Edge、FF、Chrome和Safari中已经可用。代码示例:"abc".repeat(3) // "abcabcabc"

如果repeat方法不可用,可以使用旧的方法来实现,即使用Array(n + 1).join("abc")。

0
0 Comments

这篇文章讨论了使用字符串的repeat方法来重复字符的问题,以及使用for循环和数组的join方法来实现相同效果的替代方法。文章中还提到了使用循环方法可能更快,但更冗长,以及使用变量来填充字符串长度的方法。然后文章指出了在处理大量字符时,使用repeat方法可能会遇到的限制,因为JavaScript引擎对字符串长度有限制。最后,文章提出了一个疑问,即为什么有这么多程序员都热衷于重复字符串,而不是使用DRY(Don't Repeat Yourself)原则。

根据文章的内容,我们可以总结出这个问题的出现原因是使用字符串的repeat方法来重复字符时可能会遇到性能问题或长度限制的情况。解决方法是使用for循环和数组的join方法来替代repeat方法,并注意处理大量字符时可能会遇到的限制。

以下是整理后的文章:

这些天,几乎在任何地方都实现了字符串的repeat方法(在Internet Explorer中没有实现)。所以除非你需要支持旧的浏览器,你可以简单地写成:

"a".repeat(10)

在repeat方法出现之前,我们使用这个技巧:

Array(11).join("a") // create string with 10 a's: "aaaaaaaaaa"

(注意,一个长度为11的数组只能得到10个"a",因为Array.join方法会将参数放在数组元素之间。)

Simon还指出,根据这个基准测试,似乎在Safari和Chrome中,通过使用for循环简单地追加字符多次来重复字符更快(但在Firefox中不是)。此外,你可以使用一个变量而不是固定长度的数组(Array(20-len))来填充一个字符串,使其达到20个字符。

循环方法可能更快,但更冗长。此外,我对第一个评论的点赞感到困惑,因为当数组长度是可变的时候,这通常是有用的,例如Array(rawValue.length + 1).join("*")。

当你尝试使用10的12次方(Math.pow(10, 12))重复字符时,它不起作用Array(Math.pow(10, 12)).join("a")。这是因为JS引擎对字符串长度有限制。在Chrome和Firefox中,限制接近2^30(约十亿)。10^12是一万亿。

(我想知道这个字符串是什么,以至于有一千个程序员如此热衷于重复它。难道你们都没有听说过DRY原则吗?)

0