配列の要素を順番に等しいか比較する方法 – JavaScript
はじめに
JavaScriptでは、2つの配列を用意し、同じインデックス(位置)にある要素同士を比較して、一致している値がいくつあるかを数える関数が必要になることがあります。
この比較は順序に依存します。つまり、1つ目の配列の先頭の要素は、2つ目の配列の先頭の要素と比較され、その次は2番目の要素同士、というように対応する位置ごとに評価していきます。順番が入れ替わっていれば、たとえ同じ値が含まれていても一致とはみなされません。
問題の例
例として、次の2つの入力配列を考えてみましょう。
const arr1 = [4, 7, 4, 3, 3, 3, 7, 6, 5]; const arr2 = [6, 5, 4, 5, 3, 2, 5, 7, 5];
この場合、出力は 3 になります。実際に確認してみると、一致しているのは以下の3箇所です。
- インデックス2:4 === 4
- インデックス4:3 === 3
- インデックス8:5 === 5
解決策:forループで対応する要素を比較する
この問題は、forループを使って両配列の同じインデックスの値を1つずつチェックするだけでシンプルに解決できます。ループの中で値が異なる場合は continue でスキップし、一致していた場合はカウンターを増やします。
コード例
以下が実装コードです。
const arr1 = [4, 7, 4, 3, 3, 3, 7, 6, 5];
const arr2 = [6, 5, 4, 5, 3, 2, 5, 7, 5];
const correspondingEquality = (arr1, arr2) => {
let res = 0;
for(let i = 0; i < arr1.length; i++){
if(arr1[i] !== arr2[i]){
continue;
};
res++;
};
return res;
};
console.log(correspondingEquality(arr1, arr2));実行結果
このコードを実行すると、コンソールには次のように出力されます。
3
補足:filterを使った別の書き方
より簡潔に書きたい場合は、filter() メソッドとアロー関数を組み合わせる方法もあります。
const correspondingEquality = (arr1, arr2) => arr1.filter((val, i) => val === arr2[i]).length;
この一行でも同じ結果 3 が得られます。対応する位置の要素だけを比較したい場面では、どちらの方法でも十分実用的です。
-
JavaScriptのarray.keys()メソッドの使い方と実行例をわかりやすく解説
JavaScriptのarray.keys()メソッドとは JavaScriptのarray.keys()メソッドは、配列のキー(インデックス番号)を格納したArray Iteratorオブジェクトを返すメソッドです。戻り値はイテレータであるため、for...of文などを使って順番に値を取り出して利用します。 構文 array.keys() 引数は不要で、呼び出された配列の各要素のインデックス(0から始まる番号)を持つイテレータが返されます。 サンプル1:車種リストのキーを表示する 次の例では、「Crossover」「Convertible」「Hatchback」「SUV」という4つの車種
-
JavaScriptのArray.isArray()メソッドとは?オブジェクトが配列かどうかを判定する方法
JavaScriptのArray.isArray()メソッドは、指定したオブジェクトが配列であるかどうかを判定するためのメソッドです。判定結果は真偽値として返され、配列であれば true、それ以外の場合は false を返します。typeof 演算子では配列も「object」と判定されてしまうため、正確に配列を見分けたい場面では Array.isArray() が最適な方法となります。基本構文Array.isArray(ob)引数の ob には、判定対象となるオブジェクトを指定します。サンプルコード①:ボタン操作で配列判定を行う <!DOCTYPE html> <html&g