Sae/note

【もりけん塾】言語チャレンジ@配列を任意の個数に分割する

目次

    もりけん塾で新たに追加された課題....「 言語チャレンジ 」に取り組んでいます。

    課題はあらかじめinputする値が決まっていて、outputの値が戻り値になる様なコードを書きます
    ここではoutputの値が、課題で提示されている通りになっていればクリアとなります。

    今回は、課題22に取り組みました!

    課題22

    2つのパターンの input&output があり、それぞれ outputの値になる様な関数を考えます

    input

     ["a", "b", "c", "d"]
    

    and 2

    output

     [["a", "b"],["c", "d"]]
    

    input

     ["a", "b", "c", "d"]
    

    output

     [["a", "b","c"], ["d"]]
    

    とりあえず考えをまとめる

    - slice()を使用してできそう
    - 全体の関数の引数に 範囲(index)を渡せる様にして
    それをsliceの引数に渡せば良さそう

    2つ目のinputの値は ["a", "b", "c", "d"] だけ
    2つ目の仮引数へ範囲を渡すことができない...
    初期値を設定することで解決できそう

    考えをまとめたので、とりあえずコードを書いてみた

    const input = ["a", "b", "c", "d"]
     let arr = [];
     const f = (parma, size) => {
        const a = parma.slice(0, size);
        const b = parma.slice(size);
        arr.push(a, b);
    }
    

    1つ目のinputを渡した場合

    f(input,2);
    console.log(arr);  // [["a", "b"],["c", "d"]]
    

    2つ目のinputを渡した場合

    f(input);
    console.log(arr);  // [["a", "b","c"], ["d"]]
    

    どちらのinputを入れても 指定されたoutputの値になりましたが
    変数arrの配列にpush為、1つ目と2つ目を一緒に実行した場合 意図していないoutputになってしまうのと、もう少しシンプルにコードを書けると思いました。

    slice

    もっとシンプルに書けそう

    const input = ["a", "b", "c", "d"]
    const f = (parma, size = 3) => [parma.slice(0, size), parma.slice(size)];
    
    const result1 = f(input, 2);
    console.log(result1); // [["a", "b"],["c", "d"]]
    
    const result2 = f(input);
    console.log(result2); // [["a", "b","c"], ["d"]]
    

    https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/slice

    splice

    spliceというメソッドを発見!
    sliceと違い spliceは破壊的なメソッドの為 元の配列を壊してしまう

    仮引数でスプレッド構文を使用して
    クローンに対してspliceを使えば良さそう

    const input = ["a", "b", "c", "d"]
    const f = ([...parma], size = 3) => [parma.splice(0, size), parma];
    
    const result1 = f(input,2);
    console.log(result1);  //  [["a", "b"],["c", "d"]]
    
    const result2 = f(input);
    console.log(result2);  // [["a", "b","c"], ["d"]]
    

    こうすることで変数inputへは影響することがなく 実装することができました

    https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/splice


    もりけん塾でJavaScriptを学習をしています!
    もりけん先生のTwitter:https://twitter.com/terrace_tech

    https://kenjimorita.jp/