【问题标题】:Algorithm challenge: Repeating a string算法挑战:重复一个字符串
【发布时间】:2019-06-20 03:53:30
【问题描述】:

刚刚学习 JS,正在经历算法挑战。

下面的代码应该重复一个字符串 (str) x (num) 次。

例如,repeatStringNumTimes('*', 3) 应该是 '***'。 下面的代码就是这样做的……但是在输出的开头出现了一个“未定义”的单词。这是为什么?!我已经定义了所有变量...

function repeatStringNumTimes(str, num) {

    let len = str.length;
    let string;

for (let i = 0; i < num; i++) {

    for (let x = 0; x < len; x++) {

        string += str[x];

    }

}
return string;
}

console.log(repeatStringNumTimes('*', 10));

【问题讨论】:

  • let string;更改为let string = "";,因为字符串最初是undefined
  • let string; 视为let string = undefined

标签: javascript


【解决方案1】:

我已经定义了所有变量

是的,您定义它,但没有初始化

javascript 中的默认初始化是undefined

所以,let a; 等于 let a = undefined;
你应该用空字符串初始化你的字符串:

let string = '';  

请注意:

现代 javascript 引擎有String.prototype.repeat 方法用于该任务:

console.log('*'.repeat(10)); // **********

【讨论】:

    【解决方案2】:

    好的,为了完成这项工作,我添加了

    let string = "";
    

    我不确定为什么会这样。非常感谢有经验的人提供任何见解。

    【讨论】:

    • 字符串最初是undefined(从未初始化)。然后string += str[x] 在第一个循环中,展开为string = undefined + str[x]
    【解决方案3】:

    你可能需要声明字符串:

    let string = "";
    

    更新:

    那是因为这行:

    string += str[x];
    

    相当于:

    string = string + str[x]; 
    // equivalent to string = undefined + str[x]
    

    如果有意义的话,您正在为自己分配一个未定义的字符串 (+ str[x])。

    【讨论】:

    • 您能否详细说明为什么需要指定它?我问只是因为我缺乏 JS 知识。
    • 因为这一行:string += str[x];您基本上是在将未定义字符串的值 + str[x] 添加到自身。
    【解决方案4】:

    使用while的传统方法

    const repeatStringNumTimes = (str, num) => {
      let res = str
      while (--num) res += str
      return res
    }
    
    console.log(repeatStringNumTimes('*', 10))

    使用String.prototype.repeat

    const repeatStringNumTimes = (str, num) => str.repeat(num)
    
    console.log(repeatStringNumTimes('*', 10))

    使用String.prototype.padStart()String.prototype.padEnd()

    const repeatStringNumTimes = (str, num) => ''.padStart(num, str)
    
    console.log(repeatStringNumTimes('*', 10))

    使用Array.prototype.join()

    const repeatStringNumTimes = (str, num) => Array(num).join(str)
    
    console.log(repeatStringNumTimes('*', 10))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      • 2022-07-24
      • 2012-06-29
      • 2011-09-25
      • 2013-03-30
      • 1970-01-01
      相关资源
      最近更新 更多