JavaScriptで配列から指定した数に最も近い値を取得する方法
はじめに
本記事では、JavaScriptを使って「配列の中から指定した数値に最も近い値を見つけて返す」関数の実装方法を解説します。
この関数は、第1引数として数値の配列を、第2引数として単一の数値を受け取ります。そして、配列の中から第2引数で指定された数値に最も近い要素を探し出し、その値を返します。
問題の例
例えば、以下のような配列と数値が与えられた場合を考えてみましょう。
const arr = [34, 67, 31, 53, 89, 12, 4]; const num = 41;
この場合、41に最も近い配列の要素は 34 となるため、出力結果は 34 になります。
実装コード
以下が実際のコード例です。
const arr = [34, 67, 31, 53, 89, 12, 4];
const num = 41;
const findClosest = (arr = [], num) => {
let curr = arr[0];
let diff = Math.abs (num - curr);
for (let val = 0; val < arr.length; val++) {
let newdiff = Math.abs (num - arr[val]);
if (newdiff < diff) {
diff = newdiff;
curr = arr[val];
};
};
return curr;
};
console.log(findClosest(arr, num));コードの解説
この関数の仕組みは以下の通りです。
まず、配列の最初の要素を暫定的な「最も近い値(curr)」として設定し、その値とターゲットの数値との差の絶対値を計算します。次に、forループで配列の各要素を順番に走査し、それぞれの要素とターゲット数値との差(newdiff)を求めます。もし新しい差が現在の差よりも小さければ、その要素を新たな「最も近い値」として更新します。
この処理を配列の末尾まで繰り返すことで、ターゲットに最も近い要素が確定し、最終的にその値が返されます。計算量は O(n) であり、配列を一度走査するだけで結果が得られる効率的なアルゴリズムです。
実行結果
上記のコードをコンソールで実行すると、以下の出力が得られます。
34
まとめ
このように、差の絶対値を比較しながら配列を一度だけ走査するシンプルなアプローチで、指定した数値に最も近い配列の要素を効率的に取得できます。数値データの分析や、ユーザー入力に近い候補を提示したい場合など、さまざまな場面で応用できる便利なテクニックです。
-
【JavaScript】数値を逆順にした値が素数かどうかを判定する方法
問題 今回は、数値を引数として受け取り、その数値を逆順(数字をひっくり返した値)にした結果が素数であれば true を、そうでなければ false を返す JavaScript 関数を作成します。 ちなみに、このように「逆順にすると別の素数になる数」は「エマープ(emirp:prime を逆から読んだ語)」と呼ばれることがあります。 サンプルコード 以下のコードでは、まず数値を文字列に変換して逆順に並べ替え、その後で素数判定を行っています。 const num = 13; // 数値を逆順にした値を返す関数 const findReverse = (num) => { re
-
JavaScriptで昇順配列の中から並び順を壊している唯一の要素を見つける方法
この記事では、昇順(増加順)にソートされた数値の配列の中に、ただひとつだけ並び順を乱している要素がある場合に、その要素を特定して返すJavaScript関数の実装方法を解説します。 問題の定義 扱う配列は基本的に昇順でソートされていますが、その中の要素がひとつだけ順序から外れています。関数の目的は、その「異常な要素」を見つけ出して返すことです。 たとえば、次のような配列を考えます。 const arr = [1, 2, 3, 4, 17, 5, 6, 7, 8]; この配列から「17」を取り除けば残りは完全な昇順になるため、求める答えは「17」です。 解決のアプローチ 昇順の配列では、隣り合う