簡體   English   中英

算法挑戰:重復字符串

[英]Algorithm challenge: Repeating a string

剛學習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));

我已經定義了所有變量

是的,您定義它,但不初始化

javascript中的默認初始化是undefined

所以, let a; 等於let a = undefined;
您應該使用空字符串初始化字符串:

let string = '';  

請注意:

現代的javascript引擎具有用於該任務的String.prototype.repeat方法:

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

您可能需要聲明字符串:

let string = "";

更新:

因為這行:

string += str[x];

等於:

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

您正在為其分配一個未定義的字符串(+ str [x]),如果這是有意義的話。

好的,為了完成這項工作,我添加了

let string = "";

我不知道為什么會這樣。 任何有經驗的人的見解將不勝感激。

傳統方法使用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)) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM