一つの配列の要素が、もう一つの配列の要素に含まれているか知りたい場合(filterとincludes)
例)
宝くじの当選番号が発表されました!
winningNumbers = [ 2, 5, 7 ];
私の持っている宝くじの番号は、これ!
myNumbers = [ 1, 2, 5, 6, 8, 9, 10];
当選番号と一致している番号は、どれだろう!?
出力結果:[ 2, 5]
2つも一致している!やったー!
っていうのを、やります。
方法
includes関数とfilter関数を使うことで、簡単にできます。
書き方
詳細は下記に記載してます。
const winningNumbers = [ 2, 5, 7 ];
const myNumbers = [ 1, 2, 5, 6, 7, 9, 10];
const matchNumber = myNumbers.filter(myNumber => winningNumbers.includes(myNumber));
console.log(matchNumber);
includes関数とは
与えられた値が配列内に存在するかどうかを調べ、Boolean値を返します。配列に値が含まれている場合はtrueを返し、含まれていない場合はfalseを返します。
例)
const array = [1, 2, 3, 4, 5];
const value1 = 3;
var checkIncluded = array.includes(value1); // true
const value2 = 6;
var checkIncluded = array.includes(value2); // false
上記の例では、value1である3、またはvalue2である6が、arrayの配列内に含まれているか判断しています。含まれていれば、trueになり、含まれていなければfalseになります。
filter関数とは
与えられた条件に一致する(true)要素だけの新しい配列を作成します。元の配列は変更されず、新しい配列が作成されます。
例)
const array = [1, 2, 3, 4, 5];
const newArray = array.filter(element => element % 2 === 0);
console.log(newArray); // [2, 4]
上記の例では、array配列の中から偶数の要素だけを取り出し、newArrayという新しい配列を作成しています。element % 2 === 0という条件式は、要素が2で割り切れるかどうかを判定しています。割り切れた場合trueを返し、割り切れなかった場合はfalseを返します。したがって、newArrayには2と4が含まれます。
includes関数とfilter関数を組み合わせる!
ここまで、理解できれば、あとは、includes関数とfilter関数を合体させればいけそうですね!
最初に書いたコードと同じものを今一度記載します!
const winningNumbers = [ 2, 5, 7 ];
const myNumbers = [ 1, 2, 5, 6, 7, 9, 10];
const matchNumber = myNumbers.filter(myNumber => winningNumbers.includes(myNumber));
console.log(matchNumber);
この、winningNumbers.includes(myNumber)で、
winningNumbersという配列の中(.includes)に、myNumberは、ありますか?という処理が行われています。
じゃあ、myNumberって?
myNumbersの配列の中の要素を一つずつ取り出して、myNumberに入れています。
1回目は1、2回目は2、3回目は5・・・・・7回目は10。
ここで、winningNumbersという配列の中にmyNumberがあれば(trueであれば)、matchNumberという新しい配列の中に入っていく、という感じです。
余談
逆に、winningNumbersに含まれていなかったmyNumberを知りたい場合
『!』をつけましょう。
const winningNumbers = [ 2, 5, 7 ];
const myNumbers = [ 1, 2, 5, 6, 7, 9, 10];
const notMatchNumber = myNumbers.filter(myNumber => !winningNumbers.includes(myNumber));
console.log(notMatchNumber);
.filter(myNumber => !winningNumbers.includes(myNumber))
こんな感じで、!をつけるとその逆、つまり一致していない場合の配列が作られます。
!とは。
! は論理演算子の一つで、単項演算子の否定演算子を表します。この演算子を使うと、演算子が作用する値を反転させることができます。
つまり、.includes(myNumber)でtrueになったものはfalseで返し、falseになったものはtrueで返されます。
以上です!
最後まで見て頂きありがとうございました!
いいなって思ったら、「スキ」ボタン押してくれると励みになりますので、よろしくお願いします!
この記事が気に入ったらサポートをしてみませんか?