创建给定字符串的指定副本的字符串

Create a string of specified copies of a given string

我正在尝试对原始字符串进行 3 次迭代。我得到的结果是: [“a”,“b”,“c”,“d”,未定义,未定义,未定义,未定义,未定义,未定义,未定义,未定义,未定义,未定义,未定义,未定义]

正确的结果应该是:["a", "b", "c", "d", "a", "b", "c", "d", "a", "b ", "c", "d"]

function makeCopies (str, howmany) {
  let newCopy = [];
   for(let i = 0; i <  str.length * howmany; i++) {
   newCopy.push(str[i])
   } 
return newCopy;
}

console.log(makeCopies("abcd", 3))

我尝试了很多变体,但没有任何效果,这是我得到的最接近的。

Javascript 对此 String.prototype.repeat 有一个很好的实用程序。如果你想要一个数组,你可以在每个字符上拆分它。

console.log("abcd".repeat(3).split(""))

您正在迭代原始字符串的范围之外

str[i]; // i <  str.length * howmany;

尝试创建两个循环:

for(let i = 0; i < howmany; i++) {
  for(let j = 0; j < str.length; j++) {
    newCopy.push(str[j])
  }
}

当你乘str.length * howmany时,数组的长度变为 12,当它超过第四个值时,它找不到任何东西,因此变得不确定。

一个解决方案是您可以将主循环包装在另一个循环中,该循环将 运行 howmany 次。

function makeCopies (str, howmany) {
   let newCopy = [];
   for (let i = 0; i < howmany; i++) {
       for(let j = 0; j <  str.length; j++) {
            newCopy.push(str[j])
        } 
    }
    return newCopy;
  }

  console.log(makeCopies("abcd", 3))

JavaScript 有一个字符串重复方法。您可以只使用 "abcd".repeat(3),您将得到“abcdabcdabcd”。如果你真的想要一个字符数组,你可以将字符串扩展到一个数组中 [..."abcd".repeat(3)].

const makeCopies = (string, count) => new Array(count).join(string).split('');

console.log(makeCopies('abcd', 4))

你为什么不用repeat()

const res = "abc".repeat(3); // abcabcabc

如果你需要它作为数组,你可以:

res.split(""); // ["a", "b", "c", ...]