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

【JavaScript】配列の中から指定した数値に最も近い値を取得する方法

JavaScriptでは、数値の配列と1つの数値を入力として受け取り、その配列内に存在する値のうち、指定した数値に最も近い値を返す関数が必要になることがあります。

例えば、次のようなケースを考えてみましょう。

closest([45,61,53,98,54,12,69,21], 67); // 69
closest([45,61,53,98,54,12,69,21], 64); // 61

それでは、この機能を実装するコードを見ていきましょう。

実装のアプローチ

ここでは Array.prototype.reduce() メソッドを使用します。reduceメソッドを使って各要素と対象の数値との差分を計算し、最も差が小さい値(最小の差)を求めます。そして、その最小の差に検索対象の数値を加算することで、求めたい数値が得られます。

コード例

const closest = (arr, num) => {
    return arr.reduce((acc, val) => {
        if(Math.abs(val - num) < Math.abs(acc)){
            return val - num;
        }else{
            return acc;
        }
    }, Infinity) + num;
}
console.log(closest([45,61,53,98,54,12,69,21], 67));
console.log(closest([45,61,53,98,54,12,69,21], 64));

コードの解説

このコードの動作を順番に見てみましょう。

  • 初期値として Infinity を設定: reduceの初期値を Infinity にすることで、最初の比較で必ず配列の要素との差が「より小さい」と判定され、計算が正しく始まります。
  • Math.abs() で絶対値を比較: 各要素と対象の数値の差は負になる可能性があるため、Math.abs() で絶対値に変換してから比較します。これにより、数値が大きいか小さいかに関係なく、「距離」だけを評価できます。
  • 最後に num を加算: reduceの結果として得られるのは「差分」なので、元の数値 num を足し戻すことで、実際に最も近い配列の値が取得できます。

出力結果

上記のコードをコンソールで実行すると、次のような出力が得られます。

69
61

最初の例では67に最も近い値として69が、2つ目の例では64に最も近い値として61が正しく返されていることがわかります。

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

  2. 【MongoDB】JavaScriptの配列ですべてのデータベース一覧を取得する方法

    MongoDBのデータベース一覧をJavaScript配列として取得する方法 MongoDBに存在するすべてのデータベースをJavaScriptの配列として取得したい場合は、runCommand()メソッドを使うのが便利です。この記事では、listDatabasesコマンドを実行してデータベース情報を取得し、そこからデータベース名だけを抽出して配列に格納するまでの手順を、実際のコード例とともに解説します。 1. runCommand()でデータベース情報を取得する まず、mongoシェルでuse adminを実行して管理用データベースに切り替え、その後にrunCommand()でlistDat