JavaScript:一句代碼輸出重復字符串(字符串乘法)


 

看到一個題目要求寫一個函數times,輸出str重復num次的字符串。

比如str:bac     num:3

輸出:abcabcabc

 

除了利用循環還有幾種方法,我學習研究之后記下以下三種方法。

1. 遞歸,結合三元表達式更簡潔。

2. 數組的  join() 方法。

3. ES6的 repeat() 方法。

-------新加入

4.string的replace()方法 ----原創的哇,明天去面試,復習的時候我自己想出來的

 

我最喜歡第一種,因為用的都是最基本的語法,沒有調用其他方法。

除了第一種剩下都可以一句代碼完成輸出。

python可以 str*num ,最先誤以為js也行,驗證了。。。不行  Orz。。。

 我的github:swarz,歡迎給老弟我++星星

以下代碼:(假設num有效)

/******************************************
  1. 最簡潔 三元表達式 + 遞歸
*******************************************/
var times = (str, num) => {
    return num > 1 ? str += times(str, --num) : str;
}
console.log('1', times('abc', 3));

/******************************************
  2. ES6 repeat()
*******************************************/
var times2 = (str, num) => str.repeat(num);
console.log('2', times2('abc', 3));

/******************************************
  3. 數組方法 join()
*******************************************/
var times3 = (str, num) => new Array(num + 1).join(str);
console.log('3', times3('abc', 3));

/******************************************
  4. 數組方法 fill() join()
*******************************************/
var times4 = (str, num) => new Array(num).fill(str).join('');
console.log('4', times4('abc', 3));

/******************************************
    5. 用call()改變Array原型鏈上join()方法
    可惜么理解 用對象添加屬性?
*******************************************/
var times5 = (str, num) => Array.prototype.join.call({length: ++num}, str);
console.log('5', times5('abc', 3));

/******************************************
  6.string.replace
*******************************************/
var times6 = (str, num) => Math.pow(10, num - 1).toString().replace(/1|0/g, str)
console.log('6', times6('abc', 3));


/*++++++++++++++++++++++++++++++++++++++++++
    必須用一句代碼實現的話
    除了第一種,都可以用匿名函數立即執行實現
++++++++++++++++++++++++++++++++++++++++++*/
//例如:
console.log('e.g.1', ((str, num) => str.repeat(num))('abc', 3));
console.log('e.g.2', ((str, num) => new Array(num + 1).join(str))('abc', 3));

執行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM