Sae/note

【もりけん塾】言語チャレンジ@配列同士で一致した値を格納した配列を返す

目次

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

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

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

    課題23

    3つのパターンの input&output があり、それぞれのinputに対して決められたoutputの値になる様な関数を考えます
    inputした配列同士で 一致した値を格納した配列を新たに返す方法を考えました
    一致する値がなければ空の配列を返します

    input

    [2, 1], [2, 3]
    

    output

    [2]
    

    input

    [5, 1], [2, 6]
    

    output

    []
    

    input

    [2, 1, 6], [2, 3, 6]
    

    output

    [2, 6]
    

    filter

    filterを使用して、inputした2つの配列の 同位置にある値を比較して、一致していれば値を返す方法で実装してみよう

    const f = (a, b) => a.filter((value, index) => value === b[index]);
    
    const result1 = f([2, 1], [2, 3]);
    console.log(result1);
    // [2]
    
    const result2 = f([5, 1], [2, 6]);
    console.log(result2);
    // []
    
    const result3 = f([2, 1, 6], [2, 3, 6]);
    console.log(result3);
    //  [2, 6]
    

    filter + includes

    filterだけの場合は配列の位置同士で比較を行なっているから、以下の様なパターンには使用できない

    const f = (a, b) => a.filter((value, index) => value === b[index]);
    
    const result1 = f([2, 1], [3,2]);
    console.log(result1);
    // []
    

    同位置でなくても同じ結果になる様にしたい...
    includesを使用して、含まれているか?否かをfilterの条件にしよう

    const f = (a, b) => a.filter((num) => b.includes(num));
    
    const result1 = f([2, 1], [2, 3]);
    console.log(result1);
    // [2]
    
    const result2 = f([5, 1], [2, 6]);
    console.log(result2);
    // []
    
    const result3 = f([2, 1, 6], [2, 3, 6]);
    console.log(result3);
    //  [2, 6]
    

    filter + indexOf

    indexOfを使用したverもやってみる

    indexOfメソッドは 引数の値が 指定した配列内にあれば 一致した最初のindexを返してくれる。その特性を使って、indexOfが返すindexと現在のindexが一致しなければ、重複しているということになるので、それを条件にfilterする

    const f = (a, b) => {
     const arr = [...a, ...b];
     return arr.filter((value, index) => arr.indexOf(value) !== index);
    };
    
    const result1 = f([2, 1], [2, 3]);
    console.log(result1);
    // [2]
    
    const result2 = f([5, 1], [2, 6]);
    console.log(result2);
    // []
    
    const result3 = f([2, 1, 6], [2, 3, 6]);
    console.log(result3);
    //  [2, 6]
    

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

    https://kenjimorita.jp/