【问题标题】:Create a string of specified copies of a given string创建给定字符串的指定副本的字符串
【发布时间】:2021-03-09 20:25:37
【问题描述】:

我正在尝试对原始字符串进行 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))

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

【问题讨论】:

  • 使用i % str.length 可以获得0,1,2,3,0,1,2...
  • str.length * howmany 是 16。当你到达 i = 6 时,你正在做 str[6]。
  • 已经在这里回答:stackoverflow.com/questions/1877475/…
  • 我不确定我是否理解......

标签: javascript loops push


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 谢谢,我不知道这个。
    【解决方案3】:

    当你乘以 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))
    

    【讨论】:

    • 我认为它会继续循环通过相同的字符串。就像它对数组一样?谢谢。
    • 不幸的是,它不会自行循环。您问题中的for loop 基本上如下所示:for(let i = 0; i &lt; 12; i++) {,因此循环将在数组中查找索引高于数组中可用索引的元素。
    • 谢谢 我现在明白了,太好了。
    • 别担心,伙计。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      你为什么不用repeat()?

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

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

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

      【讨论】:

        【解决方案6】:

        你在原始字符串的范围之外进行迭代

        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])
          }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-08
          • 1970-01-01
          • 1970-01-01
          • 2021-06-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多