1
我知道有很多關於按多個值對javascript數組進行排序的問題,但沒有一個答案可以解決我的問題。如何找到最接近原點的座標?
我有這樣的座標數組:
x | y
--------
10 20
12 18
20 30
5 40
100 2
我怎樣才能獲得的座標最接近原點?
我知道有很多關於按多個值對javascript數組進行排序的問題,但沒有一個答案可以解決我的問題。如何找到最接近原點的座標?
我有這樣的座標數組:
x | y
--------
10 20
12 18
20 30
5 40
100 2
我怎樣才能獲得的座標最接近原點?
使用
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
來確定最接近的點。
對於每個x,y
對,平方x,平方y並加在一起。最小的數字最接近原點。
不需要平方根。如果a^2> b^2那麼a> b。 –
沒錯,謝謝你的反饋。我會更新我的答案。 – naomik
@naomik這是曼哈頓距離,它用於某些應用程序 - 我不知道它是否適用於此。 –