Javascript 基于x值和y值的不同点之间的最大距离?

Javascript 基于x值和y值的不同点之间的最大距离?,javascript,arrays,for-loop,math,distance,Javascript,Arrays,For Loop,Math,Distance,我得到了一组存储在数组arr中的节点。 每个节点都有一个x和y值,表示屏幕上的位置。 现在,我创建了arr的中间元素,并将其保存在middle中。 现在,我的目标是,找出middle和所有其他节点之间的距离,并找出距离最大的节点。对于距离,我使用毕达哥拉斯定理a^2+b^2=c^2,这意味着sqrt(a^2+b^2)=c,或者在我的例子中sqrt(x^2+y^2)=两个节点之间的距离 例如,为了创建(10,10)和(20,30)之间的距离,我创建了x刻度和y刻度的差值,这意味着x=20-10=1

我得到了一组存储在数组
arr
中的节点。 每个节点都有一个x和y值,表示屏幕上的位置。 现在,我创建了
arr
的中间元素,并将其保存在
middle
中。 现在,我的目标是,找出
middle
和所有其他节点之间的距离,并找出距离最大的节点。对于距离,我使用毕达哥拉斯定理
a^2+b^2=c^2
,这意味着
sqrt(a^2+b^2)=c
,或者在我的例子中
sqrt(x^2+y^2)=两个节点之间的距离

例如,为了创建
(10,10)
(20,30)
之间的距离,我创建了x刻度和y刻度的差值,这意味着
x=20-10=10
y=30-10=20
。结果是,这些节点之间的距离是
sqrt(10^2+20^2)=22,3。
在我的代码中,我使用
if循环检查,其中x值和y值更大,以避免出现负值。但我做的东西是错的。也许有人能帮忙

    var middle = arr[Math.floor(arr.length / 2)];
    var arrayForDistance = [];
    var distance = [];
    for(i = 0; i != arr[middle] & i< arr.length;  i++ ) {

     if(arr[i].x > arr[middle].x) { 

    var newX = arr[i].x - arr[middle].x;
    var newY = arr[i].y - arr[middle].y;
    } 

else if ( arr[i].x < arr[middle].x)
      {
    var newX = arr[middle].x - arr[i].x;
    var newY = arr[middle].y - arr[i].y;
    }}


    distance = sqrt( newX^2 + newY^2)
    arrayForDistance.push(distance[i]);
    }

    var maxDistance = Math.max.apply(null, arrayForDistance)
var middle=arr[Math.floor(arr.length/2)];
var ArrayFordInstance=[];
var距离=[];
对于(i=0;i!=arr[middle]&iarr[middle].x){
var newX=arr[i].x-arr[middle].x;
var newY=arr[i].y-arr[middle].y;
} 
else if(arr[i].x
首先,你不必担心负片,因为你正在对它们进行平方运算,它们会被抵消

其次,您的for循环是错误的,应该是错误的

var middle = arr[Math.floor(arr.length / 2)];
var arrayForDistance = [];
var distance ;
for(i = 0;  i< arr.length;  i++ ) {

    if (i != Math.floor(arr.length / 2)){
    var newX = arr[i].x - arr[middle].x;
    var newY = arr[i].y - arr[middle].y;

    distance = sqrt( newX^2 + newY^2)
    arrayForDistance.push(distance);
   }
}
var maxDistance = Math.max.apply(null, arrayForDistance)
var middle=arr[Math.floor(arr.length/2)];
var ArrayFordInstance=[];
var距离;
对于(i=0;i
问题是
i!=arr[middle]
-它会导致循环中断,因此不会在
middle
之后的元素之间循环。将其放在for循环体中,例如,如果(i==middle)continue,则将其置于for循环体中。(无论如何,首先应该是
i!=middle
)谢谢!你知道这个错误的原因吗?“arr[middle]未定义”我能看到发生这种情况的唯一方式是,如果在这个代码块之外没有定义arr(因为它未在其中定义)。当我输入
console.log(arr)
时,它会给我
数组[Object,Object,Object,Object]
console.log(中间)
为我和对象提供属性。但是
console.log(arr[middle])
未定义。不能将这样的对象用作数组的键。您需要将所有的
arr[middle]
替换为
arr[Math.floor(arr.length/2)]
或将
Math.floor(arr.length/2)
放入一个变量并使用它。哦,我发现了错误。istead of
arr[middle].x
必须是
middle.x