JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

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)であることを示しています。なお、同じ距離の要素が複数存在する場合は、最初に見つかった要素(より小さいインデックス)が返される点に注意してください。

  1. 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

  2. 【JavaScript】配列の中で左右の合計が等しくなる中央インデックス(ピボットインデックス)を見つける方法

    問題数値の配列 arr が与えられたとき、「あるインデックスより左側にあるすべての要素の合計」と「そのインデックスより右側にあるすべての要素の合計」が等しくなる位置(中央インデックス/ピボットインデックス)を求める JavaScript 関数を作成します。該当するインデックスが複数存在する場合は、最初に見つかったものを返し、存在しない場合は -1 を返すのが一般的です。たとえば、次のような入力を考えます。入力const arr = [1, 7, 3, 6, 5, 6];出力const output = 3;出力の解説インデックス 3 の要素は nums[3] = 6 です。この要素の左側にある