2015-02-06 78 views
0

我有此数组: [1,2,3,4,5]阵列位置差

欲确定两个元件之间的位置差,但在“旋转”模式。

例子: 我有3个,我想知道有多远2,我做了3.position - 2.position,和我有1

但是,如果我有5个,和我想知道在位置和位置之间的位置差异,与先例的差异,我将有5-1 = 4,因为有阵列旋转,我想要1.

你有什么想法我该如何做到这一点? (我在Javascript工作)

编辑: 这里是可以解释更清楚我想要做的

EDIT 2平局:更好的借鉴 Draw circular

+0

你提的问题是非常不清楚。你究竟想在这里做什么?这将是有见识的知道,并会帮助我们回答你的问题。 – 2015-02-06 19:49:09

+0

@thijs:找出两个数组元素之间的最短距离,假装数组是一个圆,这样就有了隐形的'......,5,1,2,3,...' – 2015-02-06 19:49:58

+0

好吧,对不起我的英文。我会画出来,它会更清晰。 – maxime 2015-02-06 19:50:08

回答

3

阵列内计算两者的距离,缠绕时的距离,并使用最小的。

该代码使用pos1pos2作为数组arr中的项目的指标,并假定pos1 < pos2

var distance = Math.min(pos2 - pos1, pos1 + arr.length - pos2); 
+0

它很棒!谢谢 ! 我会测试它的性能,因为我可能会使用它大约每秒25次...我会给出一些关于该反馈的信息 – maxime 2015-02-06 20:00:07

+0

这个函数将以每秒25次的速度完成很好的性能。而且,这样做并不是一个(非常快)的方法。 – 2015-02-06 20:22:57

0

Guffa的回答是更为简洁和简单,但我已经写了的jsfiddle所以我会分享。

var testArray = [1,2,3,4,5]; 

function getShortestDistance(element1Name, element2Name){ 
    var result = -1; 
    var position1 = testArray.indexOf(element1Name); 
    var position2 = testArray.indexOf(element2Name); 
    // The distance should never be greater than half of the array length, half being defined as integer division by 2 
    var maxDistance = Math.floor(testArray.length/2); 
    if(Math.abs(position1 - position2) >= maxDistance){ 
     result = Math.abs(testArray.length - Math.abs(position1 - position2)); 
    } 
    else{ 
     result = Math.abs(position1-position2); 
    } 
    alert('position1 is ' + position1); 
    alert('position2 is ' + position2); 
    alert('Distance is ' + result); 
} 

getShortestDistance(2,3); // Will return 1 
getShortestDistance(1,4); // Will return 2 

这里是你要修改它的jsfiddle的情况下:http://jsfiddle.net/u71vbeau/16/