使用Array()方法实现字符串重复时输出不符合预期的问题
问题:字符串重复函数输出不符合预期
调用repeatStringNumTimes("abc", 3)时,预期输出"abcabcabc",但实际输出"abcabc"。疑惑为何指定Array(3)时,字符串没有被拼接3次,反而只得到2次重复的结果?
代码如下:
function repeatStringNumTimes(str, num) { if (num <0) { return "" } else { return Array(num+1).join(str) } } console.log(repeatStringNumTimes("abc", 3));
解答
核心原因是Array(n).join(str)的工作逻辑:join方法会在数组的每两个元素之间插入分隔符。也就是说,长度为n的数组,调用join(str)后会生成n-1次str的拼接结果。
举个例子:
Array(3).join("abc"):数组有3个空元素,元素间有2个间隔,因此输出abcabc(2次重复)Array(4).join("abc"):数组有4个空元素,元素间有3个间隔,因此输出abcabcabc(3次重复)
你代码里写的是Array(num+1).join(str),按道理传入num=3时应该得到正确结果,但实际输出abcabc,大概率是代码执行时用的是Array(num).join(str)(也就是没加1),导致少了一次重复。
另外,现在JavaScript有原生的字符串重复方法String.prototype.repeat(),用它实现更简洁直观:
function repeatStringNumTimes(str, num) { return num > 0 ? str.repeat(num) : ""; }
当num为正数时直接返回重复后的字符串,负数则返回空字符串,完全符合需求。
内容的提问来源于stack exchange,提问作者Wattlebird
相关产品推荐
相关产品推荐

