ときたの技術ノート

アウトプット!!!近道はない。泥臭く頑張れ。

【リファクタリングメモ】vol.1 -JavaScript -

問題

下記のコードの(1), (2) を修正すること。
(参考) joinWordsメソッドは、文字列をdelimiterごとに連結するメソッドである。
stringArrは文字列が格納されている配列、delimiterは区切り文字を表す。

function joinWords(stringArr,delimiter){
    let words = "";
    for(let i=0; i< stringArr.length; i++) {
        words+=stringArr[i];
        
        if(i===stringArr.length-1) break; // もっとシンプルに書ける(*1)
        words+=delimiter;(*1)
    }
    // このコードがダメな理由→「undefined」と表示される(*2)
    //return console.log(words);
    return words;
}
console.log(joinWords(["Monday","Tuesday","Wednesday"],'-'));

(*1)について

下記のように最後に区切り文字が連結されることを防ぎたい。↓

Monday"-"Tuesday"-"Wednesday-

そのためループの最後の番目にbreak文を使い、区切り文字を連結させないようにしていたが、もっとシンプルにやれた。 joinメソッドを使えばいい。
join() メソッドは、配列の要素を指定した区切り文字で結合して文字列として返すことができる。
これを使って以下のように書き換えたものがこちら。

if(i===stringArr.length-1) break; // もっとシンプルに書ける(*1)
words+=delimiter;(*1)

書き換え↓

words.join(delimiter);

2行が1行になり、非常にスッキリした。

(*2)について

この関数の出力結果がundefinedになるのは、console.log(words)をreturn文の代わりに使用しているため。 console.log()はコンソールに値を表示するだけで、値を返さない。 なので、この箇所はreturn文を使用して値を返すようにする必要がある。