-
Notifications
You must be signed in to change notification settings - Fork 1.4k
repeat a string repeat a string
S1ngS1ng edited this page Mar 20, 2017
·
1 revision
- 这个
function
接收两个参数。第一个参数为字符串str
,即为要重复输出的字符串。第二个参数num
为一个数字,表示要重复输出的次数。返回值为字符串 - 比如接收参数为 "" 和 3,那么应该返回 "**"。如果接受的第二个参数为负数,则返回空字符 ""
- 没什么可以参考的,会写循环就行
- 重复输出,最直观的方式就是写一个循环。当然,
for
或者while
都可以。以下会给出这两种写法 - 当然,首先要在外面建立一个空字符,用于存储结果。在遍历过程中,只需要把字符串加到这个变量就行了
- 如果采用其他方法,请注意判断传入的
num
是否为负数。你会在文章后面看到具体说明
function repeat(str, num) {
var result = "";
for (var i = 0; i < num; i++) {
result += str;
}
return result;
}
function repeat(str, num) {
var result = "";
while (num > 0) {
result += str;
num--;
}
return result;
}
- 有些朋友可能会问,为什么这里不处理特殊情况,就是判断
num
是否大于 0 呢?其实,如果num
小于等于 0,那就不会通过第一个解法中i < num
或 第二个解法中num > 0
的判断,也就不会执行循环体的代码,直接return result
。既然我们已经把初始值设置为了空字符串 "",因此这时得到的就是正确的结果 - 多说一句关于
while
和do while
。两者的区别在于,while
是先判断再执行,do while
是先执行再判断 - 对于
while
,我们可以直接用num
来判断,执行的时候num--
就可以了。不需要再定义额外的参数
在 ES6 中,有一个字符串的内建方法 String.repeat()
。只是,一定要先判断 num
是否大于 0,否则会报错
function repeat(str, num) {
return num > 0 ? str.repeat(num) : "";
}
- 这里用了三元运算符。其实也可以写成
if else
的形式 - ES6 需要浏览器支持,只要你用的是最新版的 Chrome,Safari 或者 Firefox,就肯定没问题
还记得数组有一个 .join()
方法吗?它也可以返回字符串
function repeat(str, num) {
if (num > 0) {
return Array(num + 1).join(str);
}
return "";
}
- 其实最后的
return ""
就相当于是else
的部分。因为如果通过了判断,会直接返回if
里面的内容,形成逻辑短路,也就不会执行return ""
这一句了 - 原理也不复杂。
Array()
是 JavaScript 中的数组构造器,传入一个数字num + 1
,就可以生成长度为num + 1
的空数组,数组中的元素均为undefined
- 然后我们通过
.join()
方法,把这个数组变成字符串。undefined
会自动转换成空字符串。对于每个元素,用join()
的参数把它们连接起来。这就是代码的意思 - 举个例子,执行
["a", "b", "c"].join("x")
,我们就可以得到字符串 "axbxc" - 至于
num + 1
,是因为我们需要输出num
次,如果生成的数组长度为num
,那么join
之后会少一次,因为join
相当于把参数填入数组元素的"空缺"中