2017-10-08 40 views
1
var element_pairs = [[11.333112,22.655543],[35,31231,33.2232],[122352,343421]]; 
var search_pair = [32,1113,34.5433]; 
findClosestPair(element_pairs, search_pair); 
// [35,31231,33.2232] 

ペアの配列で数学的に最も近い数のペアを見つける最も速い方法は何ですか?ペアの配列で最も近い数のペアを見つける最も速い方法は何ですか?

+0

あなたは要素 'ペア' を言っている、まだあなたは配列内の三つの要素を持っている '[35,31231,33.2232]'と '[32,1113,34.5433]' – mseifert

+2

は「最も近いの定義" –

+0

番号のペア間の距離を測定する複数の"数学的な "方法があります。どちらを使いたいですか? – Bergi

答えて

1
あなたは Array#reduceを使用して持っているタプルを返すことができ

すべてのペアの最小デルタ。

function findClosestPair(elements, search) { 
 
    return elements.reduce(function (a, b) { 
 
     function getDelta(v, w) { 
 
      return Math.abs(v[0] - w[0]) * Math.abs(v[1] - w[1]); 
 
     }     
 
     return getDelta(a, search) < getDelta(b, search) ? a : b; 
 
    }); 
 
} 
 

 

 
var elements = [[11.333112, 22.655543], [35.31231, 33.2232], [122352, 343421]], 
 
    search_element = [32.1113, 34.5433]; 
 

 
console.log(findClosestPair(elements, search_element));

1

すべての要素に渡って反復処理を行うと最短の要素を切り替えて、最後にそれを返す:あなたはここでこの作品を見ることができます

function findClosestPair(elements,search_element) { 
    var shortestDistance, shortestDistanceIndex; 

    elements.forEach((el, index) => { 
    distance = Math.sqrt(Math.pow(el[0] - search_element[0], 2) + Math.pow(el[1] - search_element[0], 2)); 
    if (shortestDistance === undefined || distance < shortestDistance) { 
     shortestDistance = distance; 
     shortestDistanceIndex = index; 
    } 
    }); 

    return elements[shortestDistanceIndex]; 
} 

=>https://jsfiddle.net/q8738b9a/

関連する問題