JavaScriptで配列内の数値に最も近い要素のインデックスを取得する方法
JavaScriptでは、配列の中から特定の数値に最も近い要素を見つけ、そのインデックスを取得したい場面がよくあります。例えば、次のような数値の配列があるとします。
const arr = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362];
要件
この配列と、ある数値 n を引数として受け取る関数を作成します。関数は、配列内の要素のうち n に最も近い値を持つ要素のインデックスを返す必要があります。
実装例
以下のコードでは、各要素と目標値との差の絶対値を計算し、差が最小となる要素のインデックスを順番に追跡していきます。
const arr = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362];
const closestIndex = (num, arr) => {
let curr = arr[0], diff = Math.abs(num - curr);
let index = 0;
for (let val = 0; val < arr.length; val++) {
let newdiff = Math.abs(num - arr[val]);
if (newdiff < diff) {
diff = newdiff;
curr = arr[val];
index = val;
};
};
return index;
};
console.log(closestIndex(150, arr));コードの解説
処理の流れは以下の通りです。
- まず、初期状態として配列の最初の要素を「最も近い候補」に設定します。
- ループで各要素を走査し、
Math.abs()を使って目標値との差の絶対値を計算します。 - 現在記録している差より小さい差が見つかれば、その値・差・インデックスを更新します。
- すべての要素を確認した後、最も近かった要素のインデックスを返します。
出力結果
上記のコードをコンソールで実行すると、次のように出力されます。
4
これは、150 に最も近い配列の要素が arr[4] の「162」(差は12)であることを示しています。なお、同じ距離の要素が複数存在する場合は、最初に見つかった要素(より小さいインデックス)が返される点に注意してください。
-
JavaScriptでIDを指定して要素を削除する方法
JavaScriptでIDを指定して要素を削除するIDを使ってHTML要素を削除するには、remove()メソッドを使用します。このメソッドは、対象のDOM要素をドキュメントから直接取り除くことができる、最もシンプルで直感的な方法です。コード例以下は実際のサンプルコードです。<!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8> <meta name=viewport content=width=device-width, in
-
【JavaScript】配列の中で左右の合計が等しくなる中央インデックス(ピボットインデックス)を見つける方法
問題数値の配列 arr が与えられたとき、「あるインデックスより左側にあるすべての要素の合計」と「そのインデックスより右側にあるすべての要素の合計」が等しくなる位置(中央インデックス/ピボットインデックス)を求める JavaScript 関数を作成します。該当するインデックスが複数存在する場合は、最初に見つかったものを返し、存在しない場合は -1 を返すのが一般的です。たとえば、次のような入力を考えます。入力const arr = [1, 7, 3, 6, 5, 6];出力const output = 3;出力の解説インデックス 3 の要素は nums[3] = 6 です。この要素の左側にある