JavaScriptで配列から指定した値以上の要素を抽出する方法
はじめに
JavaScriptでは、数値の配列を第1引数として受け取り、単一の数値を第2引数として受け取る関数を作成する場面があります。この関数の役割は、入力配列の中から第2引数で指定した数値以上の要素だけを集め、それらを新しい配列として返すことです。
例えば、しきい値(threshold)を40と指定した場合、戻り値には元の配列のうち「40以上」の値のみが含まれることになります。
実装例:forループを使った基本的な書き方
まずは、forループを使って条件に合う要素を順番に判定していく、最も基本的な実装方法を見てみましょう。
const arr = [56, 34, 2, 7, 76, 4, 45, 3, 3, 34, 23, 2, 56, 5];
const threshold = 40;
const findGreater = (arr, num) => {
const res = [];
for(let i = 0; i < arr.length; i++){
if(arr[i] < num){
continue;
}
res.push(arr[i]);
}
return res;
};
console.log(findGreater(arr, threshold));
出力結果
コンソールには以下のように表示されます。
[ 56, 76, 45, 56 ]
コードの解説
このコードの処理の流れは以下の通りです。
- 空の配列
resを用意し、条件を満たす要素の格納先とします。 - forループで入力配列の各要素を先頭から順にチェックします。
- 現在の要素が引数
num未満の場合はcontinueによって以降の処理をスキップします。 - 条件(
num以上)を満たす要素だけをpush()でresに追加します。 - ループ完了後、
resを返り値として返します。
この例では、配列 arr の中で40以上の値である 56、76、45、56 の4つの要素が抽出されています。元の配列内での出現順序は維持される点にも注目してください。
filter()メソッドを使ったより簡潔な書き方
上記の処理は、ES5以降で利用できる Array.prototype.filter() メソッドを使うことで、1行で簡潔に書き換えることも可能です。
const findGreater = (arr, num) => arr.filter(val => val >= num);
console.log(findGreater(arr, threshold)); // [ 56, 76, 45, 56 ]
filter() は、コールバック関数が true を返した要素だけを集めた新しい配列を生成するメソッドです。「指定した値以上の要素を抜き出す」という今回の要件にぴったり適しており、可読性も大きく向上します。元の配列が変更されない(イミュータブルな)点も、実務での利用において大きなメリットといえるでしょう。
まとめ
配列から特定の条件を満たす要素を抽出する処理は、Web開発において非常によく使われるパターンです。学習段階ではロジックを理解しやすいforループでの実装から始め、実務では filter() のような高階関数を活用することで、より短く意図が伝わりやすいコードを書けるようになりましょう。
-
JavaScriptで複数の配列から要素を交互に取り出して1つの配列にまとめる方法
問題 今回は、任意の個数の配列を引数として受け取り、それらすべての配列から要素を交互に(順番に一つずつ)取り出して、新しい配列を組み立てるJavaScript関数を作成します。 例えば、関数への入力が次のような場合を考えてみましょう。 入力 const arr1 = [1, 2, 3, 4]; const arr2 = [11, 12, 13, 14]; const arr3 = [a, b, c]; 出力 const output = [1, 11, a, 2, 12, b, 3, 13, c, 4, 14]; ご覧のとおり、まず各配列の先頭要素(1、11、a)、次に各配列の2番目の要素(
-
JavaScriptで配列内の特定の数値に最も近い2つの要素を検索する方法
問題の概要JavaScriptで、ソート済みの整数配列 arr を第一引数に、目標となる数値 target を第二引数に受け取る関数を作成します。この関数は、配列内に存在する要素の中から target に最も近い2つの数値を選び、それらを昇順に並べた配列として返す必要があります。例えば、以下のような入力が与えられた場合を考えてみましょう。入力:const arr = [1, 2, 3, 4, 5];const target = 3;出力:const output = [2, 3];この場合、target の値が 3 であるため、最も近い2つの要素は 2 と 3 となり、昇順に並べて [2, 3