2017-05-16 4 views
-4

javascriptで最も近い番号を知る方法を知りたかったのですが、例えばjavascriptで最も近い番号を知る方法

私たちは、私は5

乾杯と感謝だろう4に最も近い数を、知っている可能性がどのように3つの数字、1、2、5

のように取得する場合は

あらかじめ。

+1

私たちはあなたのためのコードを書くつもりはありません。問題を解決するために何をやったのですか?最近の試行を含めて質問を編集してください。 –

+2

ネクタイがあればどうなりますか? – j08691

答えて

0

私はあなたにアルゴリズムを提供します - 多分あなたに役立つでしょう。

Loop through your comparison numbers (e.g. 1, 2, and 5). 

    On each loop iteration: { 

      Calculate the delta between the comparison number and your 
      target number (e.g. 5). The delta is the absolute value 
      from subtracting one number from the other. E.g. delta of 4 and 5 is 1. 

      If the delta is the smallest so far, store that delta and 
      the value it corresponds to in tracking variables. Or if no 
      values have yet been assigned to those tracking variables, 
      also store the delta and corresponding value. 

    } 

    After loop exit, return the "corresponding value" from your tracking variables. 

ご質問にフォローアップしている場合は、あなたが持つ難しさを抱えている特定の問題を示すために、いくつかのコードを与えることを試みます。

0

あなたは、アレイ内のあなたの数はあなたが次のことを行うことができ、可変x

var nums = [1, 2, 5]; 
var x = 4 

で比較したいnumsと呼ばれ、自分の番号があるとしましょう:

function findClosest (nums, x) { 
    var sortNums = nums.sort(function(a, b){return a-b}); 
    var diff = []; 
    var x = nums.length; 
    for (i = 0; i < x; i++) { 
     diff[i] = Math.abs(sortNums[i] - n); 
    } 
    var sortDiff = diff.sort(function(a, b){return a-b}); 
    var smallestDiff = sortDiff[0]; 
    for (i = 0; i < x; i++) { 
     if (smallestDiff == Math.abs(nums[i] - n)) { 
      return nums[i]; 
     } 
    } 
} 

そして、あなたが呼び出します関数:

findClosest (nums, x); 

注:2つの数字がある場合例えば、xに近い。 x=5で、最も近い数字が4と6の場合は、配列numsの中で最も早いものが得られます。

0

Erik Hermansenのアルゴリズムに基づいて、このコードを作成しました。それはおそらく私の前の答えよりも効率的になるでしょう。なぜならそれは1つのループしか持たず、ソートが必要ないからです。

また、同じ差異を持つ2つの異なる数字がある場合、配列の最初に現れる数字が返されます。

var numbers = [1, 2, 5]; 
var terget = 4; 

function findClosest (nums, x) { 
    n = nums.length; 
    var diff = -1; 
    var smallest; 
    var d; 
    var smallArray = []; 
    for (i = 0; i < n; i++) { 
     d = Math.abs(nums[i] - x); 
     if (diff < 0 || d < diff) { 
      diff = d; 
      smallest = nums[i]; 
     } 
    } 
    return smallest; 
} 

findClosest (numbers, target); 
関連する問題