两个元素之间的数组位置差异

时间:2015-02-06 19:45:42

标签: javascript arrays algorithm

我有这个数组: [1,2,3,4,5]

我想确定两个元素之间的位置差异,但是处于“旋转”模式。

实施例: 我有3,我想知道2是多远,我做3.position - 2.position,我有1。

但是,如果我有5,并且我想知道5.position和1.position之间的位置差异,与先前的区别,我将有5-1 = 4,并且因为有阵列旋转,我想要1。

你知道我该怎么做吗? (我在Javascript工作)

编辑: 这是一个平局,可以更清楚地解释我想做什么

编辑2:更好的吸引力 Draw circular

2 个答案:

答案 0 :(得分:3)

计算数组内的距离和环绕时的距离,并使用最小的。

此代码使用pos1pos2作为数组arr中项目的索引,并假定pos1 < pos2

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

答案 1 :(得分: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/