用于解决问题的.join
方法返回以逗号连接的字符串。
[问题]-将给定的string str
(第一个参数)重复num
次(第二个参数)。如果num
不是正数,则返回一个空字符串。 (不应使用内置的repeat()
方法)
function repeatStringNumTimes(str, num) {
// repeat after me
return num > 0 ? str.split(" ").map(function(item) {
let a = [];
for (let i = 0; i < num; i++) {
a.push(item);
}
return a;
}).join("") : "";
}
console.log(repeatStringNumTimes("abc", 3));
有更好的方法可以使用递归或循环来解决此问题,但是为什么.join("")
方法返回由逗号连接的字符串?
编辑-
repeatStringNumTimes("*", 8);
repeatStringNumTimes("abc", 4);
(导致问题的电话)
答案 0 :(得分:0)
...但是为什么.join(“”)方法返回由逗号连接的字符串?
因为您从map
返回的数组中的条目是 arrays ,所以您有一个数组数组。当您在数组上调用join
时,它将在数组的每个条目上隐式使用toString
。数组上的默认toString
使用.join(",")
,因此每个内部数组都变成一个以逗号分隔的字符串(然后您的外部.join("")
将它们之间没有分隔符组合在一起)。
这是一个简单的示例,显示了在数组数组上使用join("")
的效果:
var arrayOfArrays = [
["one", "two", "three"],
["uno", "due", "tre"],
["un", "deux", "trois"]
];
console.log(arrayOfArrays.join(""));
split
根本不应该是此解决方案的一部分。如果您愿意,可以将数组 包含在其中,但不一定一定要包含它。一个简单的while
循环递减num
并进行字符串连接将是最简单的解决方案。 (Lurkers:我是故意不为OP编写代码,因为OP需要有机会自己学习如何做...)