實作 join 的三種方法

來自 LIOJ 上的題目,因為另外兩個解法很有趣,所以想特別記錄一下。

解法一

應該大部分的人都是這樣解的 => 碰到最後一個元素時,不加上分隔值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function join(arr, separator) {
let result = ''
// 遍歷陣列元素
for(let i=0; i<arr.length; i++) {
// 不是最後一個元素才插值
if(i !== arr.length-1) {
result += arr[i] + separator
} else {
// 最後一個元素直接填入
result += arr[i]
}
}
// 回傳結果
return result
}
console.log(join(['1', '2', '3'], '!')) // 1!2!3

解法二

如果先把第一個元素給排除,會發現後面都是同個規律 => 看成是 1 + !2 + !3:

1
2
3
4
5
6
7
8
9
10
11
12
function join(arr,  separator) {
// 儲存第一個元素
let result = arr[0]
// 從第二個元素開始取出
for(let i=1; i<arr.length; i++) {
// 分隔值 + 文字
result += separator + arr[i]
}
// 回傳結果
return result
}
console.log(join(['1', '2', '3'], '!')) // 1!2!3

解法三

跟解法二的邏輯一樣,只是現在變成 => 1! + 2! + 3:

1
2
3
4
5
6
7
8
9
10
11
function join(arr,  separator) {
let result = ''
// 記得 -1 排除最後一個元素
for(let i=0; i<arr.length-1; i++) {
// 文字 + 分隔值
result += arr[i] + separator
}
// 補上最後一個元素值
return result + arr[arr.length-1]
}
console.log(join(['1', '2', '3'], '!')) // 1!2!3
費式數列 mentor-program-day19
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×