Photo by Chris Lawton on Unsplash
請完成一個 function:參數為 string,return 該字串的倒轉。
例: reverse(‘apple’) === ‘elppa’ reverse(‘hello’) === ‘olleh’ reverse(‘Greetings!’) === ‘!sgniteerG’
function reverse(str) {}
方法一、
1.要熟悉 JS 常用的 API,String.prototype.split(),將字串轉為陣列
2.知道 JS 有 Array.prototype.reverse(),將陣列倒轉
3.知道 JS 有 Array.prototype.join(),將陣列合併成一個字串
function reverse(str) {
const arr = str.split("")
const reversedStr = arr.reverse().join("")
return reversedStr
}
以下是整理過後,更精簡的 code:
function reverse(str) {
return str.split("").reverse().join("")
}
方法一可能會被面試官拒絕的部分是,reverse()這個方法太作弊了,就像排序直接用 Array.prototype.sort()一樣,直接 call out 是不行 der。
方法二、
思考邏輯
1.知道 es6
for...of
的語句,用於可迭代的物件上,可迭代物件包含陣列、字串、Map 物件、Set 物件等等。 2.知道字串相加後,會組成一個新字串。或是熟悉 es6 的Template literals。
function reverse(str) {
let reversed = ""
for (let char of str) {
reversed = `${char}${reversed}`
}
return reversed
}
除非有特殊的迴圈條件,否則多數 for 迴圈建議使用for...of
或forEach
來完成,以避免使用傳統 for 迴圈(let count = 0 ; count < 10 ; count++
)時,打錯字(ex:分號打成逗號)及不易閱讀之缺點。
方法三、
1.知道 es6 Array.prototype.reduce(),跟上 functional programming 的潮流
方法二其實已經相當不錯了,若面試官想知道其它更潮的作法,可使用 reduce()的特性,將字串相加起來。
function reverse(str) {
let arr = str.split("")
return arr.reduce((string, char) => `${char}${string}`, "")
}
更精簡的 code 如下:
function reverse(str) {
return str.split("").reduce((string, char) => `${char}${string}`, "")
}
以下是本章節的程式碼: