0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【JavaScript関数ドリル】Lodash関数の実装【勉強用】_.join関数

Last updated at Posted at 2022-02-23

#【JavaScript関数ドリル】初級編の_.join関数の実装のアウトプット

_.join関数の挙動
_.join(['a', 'b', 'c'], '~');
// => 'a~b~c'

第1引数の配列の要素の間に、第2引数を追加していく
第2引数がなければ初期値の','が追加される
##_.join関数の課題内容
https://youtu.be/tl8HO0GVaIs

##_.join関数に取り組む前の状態

  • 配列に任意の位置に順番に挿入するにはspliceを使えばよさそう
  • 普段通りのfor(let i = 0; i < array.length; i++)でよさそう

##_.join関数に取り組んだ後の状態

  • かなり強引に実装している
  • forループにspliceを用いてインクリメントした結果、当初ループの条件をi < array.lengthとしていたため無限ループとなってしまった
  • 無限ループを改善できた後も、変わりゆく配列の要素数にiの2個飛ばしで無理やり対応させてしまった
  • 変数名をnew○○とする癖があるので、解答のように配列のコピーであればcopiedArrayなど分かり易い変数名にしていくべきだと感じた
  • 加算代入+=について理解していなかった

##_.join関数の実装コード

const join = ((array, separator = ',') => {
    const newLength = array.length;
    const newArray = array.slice();
    for (let i = 1; i < (newLength * 2) - 1; i = i + 2) {
        newArray.splice(i, 0, separator);
    }
    return newArray.toString().replace(/,/g, '');
});

const arrays = ['a', 'b', 'c', 'd']
console.log(join(arrays, '~'));
// => 'a~b~c~d'

##_.join関数の解答コード

function join(array, separator = ',') {
  const copiedArray = [...array];

  let joinedString = copiedArray.shift();
  for(let i = 0; i < copiedArray.length; i++) {
    joinedString += separator + copiedArray[i];
  }

  return joinedString;
}

console.log( join(['a', 'b', 'c'], '---') );
// => 'a~b~c'
0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?