看到一個題目要求寫一個函數times,輸出str重復num次的字符串。
比如str:bac num:3
輸出:abcabcabc
除了利用循環還有幾種方法,我學習研究之后記下以下三種方法。
1. 遞歸,結合三元表達式更簡潔。
2. 數組的 join() 方法。
3. ES6的 repeat() 方法。
-------新加入
4.string的replace()方法 ----原創的哇,明天去面試,復習的時候我自己想出來的
我最喜歡第一種,因為用的都是最基本的語法,沒有調用其他方法。
除了第一種剩下都可以一句代碼完成輸出。
python可以 str*num ,最先誤以為js也行,驗證了。。。不行 Orz。。。
以下代碼:(假設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));
執行結果: