LoginSignup
0
1

More than 3 years have passed since last update.

[Javascript]まちがえながらも感覚的に実装できるまで昇華していく[後編]

Posted at

目的

  • 関数の実装を繰り返し実施し、実装までの思考法を身につける。
  • 関数の概念を頭で理解するだけでなく、感覚的に操作できるまで昇華する。
  • 英語でテクニカルな内容を理解する。

今回やること

lodashのライブラリを実装しながら学んだことをアウトプットしていきます。
if文は三項演算子で対応するように意図する。

_.lastIndexOf(array, value, [fromIndex=array.length-1])

第3引数のインデックスから逆方向に検索し、値と一致したインデックス番号を返す。なければ-1。

_.lastIndexOf([1, 2, 1, 2], 2);
// => 3

// Search from the `fromIndex`.
_.lastIndexOf([1, 2, 1, 2], 2, 2);
// => 1

実装

特に問題なし。

lastIndexOf = (array, value, fromIndex = array.length - 1) => {
    for (let i = fromIndex; 0 <= i; i--) {
        if (array[i] === value) {
            return i
        }
    }
    return -1
}

_.last(array)

配列の最後の値を取り出して返す。

_.last([1, 2, 3]);
// => 3

実装

特に問題なし

last=(array=[])=>{
    return array[array.length-1];
}

_.flatten(array)

渡した配列を一つずつなくしてくれる。

_.flatten([1, [2, [3, [4]], 5]]);
// => [1, 2, [3, [4]], 5]

学び

階層になっている時は、頭の中ではJSONを見るような気分になる。
(=階層を意識すること)

const num = [1, [2, [3, [4]], 5]];
  num[0]// =>1
   num[1] // =>[2, [3, [4]], 5]

  [2, 
  [3, [4]], 5]

実装

配列の中を取り出して配列があるかが重要。
再帰と似ていて、まずは、親子みて兄弟は親子見終わって見る。

function flatten(array) {
    const flattendedArray = [];
    for (let i = 0; i < array.length; i++) {
        const value = array[i]
        if (Array.isArray(value)) {
            flattendedArray.push(...value);
        } else {
            flattendedArray.push(value);
        }
    }
    return flattendedArray;
} 
0
1
4

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
1