javascript-.join方法返回以逗号连接的字符串

时间:2018-08-13 16:53:49

标签: javascript arrays

用于解决问题的.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("")方法返回由逗号连接的字符串?

link to problem

编辑-

repeatStringNumTimes("*", 8);  
repeatStringNumTimes("abc", 4);   

(导致问题的电话)

1 个答案:

答案 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需要有机会自己学习如何做...)