JavaScriptで別の配列の対応する値に基づいて配列の要素を取得する方法
今回は、同じ長さを持つ2つの配列を扱います。例として、次の2つの配列を考えてみましょう。
const array1 = ['a','b','c','d','e','f','g','h']; const array2 = [ 1, 0, 0, 1 , 0, 0, 1, 0];
両方の配列は必ず同じ長さであるものとします。今回作成するのは、第2の配列から渡された値を受け取り、その値が第2の配列内に存在するインデックスと同じ位置にある、第1の配列のすべての要素からなる部分配列を返す関数です。
たとえば findSubArray(0) を呼び出すと、戻り値は次のようになります。
['b', 'c', 'e', 'f', 'h']
これは、第2の配列で 0 が存在するインデックス 1、2、4、5、7 に対応する位置にある、第1の配列の要素が抽出されるためです。
それでは、この関数を実装していきましょう。
サンプルコード
const array1 = ['a','b','c','d','e','f','g','h'];
const array2 = [ 1, 0, 0, 1 , 0, 0, 1, 0];
const findSubArray = (first, second, el) => {
if(first.length !== second.length){
return false;
};
return second.reduce((acc, val, ind) => {
if(val === el){
acc.push(first[ind]);
};
return acc;
}, []);
};
console.log(findSubArray(array1, array2, 0));
console.log(findSubArray(array1, array2, 1));実行結果
コンソールには次のように出力されます。
[ 'b', 'c', 'e', 'f', 'h' ] [ 'a', 'd', 'g' ]
コードの解説
まず、2つの配列の長さが一致しているかどうかをチェックし、一致しない場合は false を返して処理を中断します。その後、reduce() メソッドを使って第2の配列を走査し、各要素が引数で渡された値 el と一致した場合に、同じインデックスにある第1の配列の要素を結果配列へ追加していきます。reduce() の初期値として空の配列 [] を指定することで、条件に合致した要素だけを集めた新しい配列が最終的な戻り値となります。
-
JavaScriptのArray.values()メソッドとは?使い方とサンプルコードを徹底解説
JavaScriptのArray.values()メソッドとは? JavaScriptのArray.values()メソッドは、対象の配列に含まれるすべての値を格納したイテレーターオブジェクトを返します。ES2015(ES6)以降で利用可能なこのメソッドは、for...ofループやスプレッド構文([...arr])と組み合わせることで、配列の各要素を効率的に取り出せます。 なお、keys()やentries()がインデックス情報も一緒に返すのに対し、values()は純粋に「値」だけを順番に提供する点が大きな特徴です。 基本構文 arr.values() 引数は不要で、戻り値として新しいArr
-
複数の値でJavaScript配列の要素を検索する方法
JavaScriptである配列(arr)が、別の配列(arr1)の複数の値・すべての要素を含んでいるかどうかを確認したい場面はよくあります。そんなときは、every()メソッドとincludes()メソッドを組み合わせることで、シンプルに判定できます。以下はそのサンプルコードです。 コード例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content=