1

我知道有很多關於按多個值對javascript數組進行排序的問題,但沒有一個答案可以解決我的問題。如何找到最接近原點的座標?

我有這樣的座標數組:

x | y 
-------- 
10 20 
12 18 
20 30 
5  40 
100 2 

我怎樣才能獲得的座標最接近原點?

回答

6

使用

Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)); 

拿結果那是

最低
var points = [ 
    {x: 10, y: 20}, 
    {x: 12, y: 18}, 
    {x: 20, y: 30}, 
    {x: 5, y: 40}, 
    {x: 100, y: 2} 
]; 

function d(point) { 
    return Math.pow(point.x, 2) + Math.pow(point.y, 2); 
} 

var closest = points.slice(1).reduce(function(min, p) { 
    if (d(p) < min.d) min.point = p; 
    return min; 
}, {point: points[0], d:d(points[0])}).point; 

closest; 
// {x: 12, y:18} 

你會發現,我們在這裏跳過Math.sqrt步計算每個點的距離。正如Mark Setchell指出的那樣,計算平方根是一種「最低公分母」操作;我們仍然可以通過獲取最小值x^2 + y^2來確定最接近的點。

+0

不需要平方根。如果a^2> b^2那麼a> b。 –

+0

沒錯,謝謝你的反饋。我會更新我的答案。 – naomik

+0

@naomik這是曼哈頓距離,它用於某些應用程序 - 我不知道它是否適用於此。 –

1

對於每個x,y對,平方x,平方y並加在一起。最小的數字最接近原點。