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

Javascript 两个元素之间的数组位置差,javascript,arrays,algorithm,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:更好地绘制 计算阵列内的距离和环绕时的距离,并使用最小值 此代

我得到了这个数组: [1,2,3,4,5]

我想确定两个元素之间的位置差,但在“旋转”模式下

例如: 我有3个,我想知道2有多远,我做了一个3.position-2.position,我得到了1

但是,如果我有5,我想知道5.position和1.position之间的位置差,根据前面的差,我会得到5-1=4,因为有数组旋转,我想要1

你知道我怎么做吗?(我使用Javascript)

编辑: 这张图可以更清楚地解释我想做什么

编辑2:更好地绘制
计算阵列内的距离和环绕时的距离,并使用最小值

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

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

计算阵列内的距离和环绕时的距离,并使用最小值

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

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

计算阵列内的距离和环绕时的距离,并使用最小值

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

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

计算阵列内的距离和环绕时的距离,并使用最小值

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

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

Guffa的答案要简洁得多,但我已经编写了JSFIDLE,所以我将与大家分享

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

下面是JSFIDLE,以防您想修改它:

Guffa的答案要简洁得多,但我已经编写了JSFIDLE,所以我将与大家分享

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

下面是JSFIDLE,以防您想修改它:

Guffa的答案要简洁得多,但我已经编写了JSFIDLE,所以我将与大家分享

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

下面是JSFIDLE,以防您想修改它:

Guffa的答案要简洁得多,但我已经编写了JSFIDLE,所以我将与大家分享

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


下面是JSFIDLE,以防您想要修改它:

您的问题非常不清楚。你到底想在这里干什么?这将有助于我们回答您的问题。@thijs:计算两个数组元素之间的最短距离,假设数组是一个圆,这样就有了不可见的
…,5,1,2,3,
好的,对不起我的英语。我会画出来,它会更清晰。所以我假设一开始你有一个带有数字的数组(可能是已知的,可能是未知的值…),你有两个值,现在你知道索引了。是否要确定数组中这两个元素之间的最短距离?您的问题非常不清楚。你到底想在这里干什么?这将有助于我们回答您的问题。@thijs:计算两个数组元素之间的最短距离,假设数组是一个圆,这样就有了不可见的
…,5,1,2,3,
好的,对不起我的英语。我会画出来,它会更清晰。所以我假设一开始你有一个带有数字的数组(可能是已知的,可能是未知的值…),你有两个值,现在你知道索引了。是否要确定数组中这两个元素之间的最短距离?您的问题非常不清楚。你到底想在这里干什么?这将有助于我们回答您的问题。@thijs:计算两个数组元素之间的最短距离,假设数组是一个圆,这样就有了不可见的
…,5,1,2,3,
好的,对不起我的英语。我会画出来,它会更清晰。所以我假设一开始你有一个带有数字的数组(可能是已知的,可能是未知的值…),你有两个值,现在你知道索引了。是否要确定数组中这两个元素之间的最短距离?您的问题非常不清楚。你到底想在这里干什么?这将有助于我们回答您的问题。@thijs:计算两个数组元素之间的最短距离,假设数组是一个圆,这样就有了不可见的
…,5,1,2,3,
好的,对不起我的英语。我会画出来,它会更清晰。所以我假设一开始你有一个带有数字的数组(可能是已知的,可能是未知的值…),你有两个值,现在你知道索引了。您想确定阵列中这两个元素之间的最短距离吗?它非常有效!谢谢我将测试它的性能,因为我可能每秒使用25次。。。我将给出一些反馈,说明这个函数在每秒调用25次时会表现得非常好。而且,没有一种(明显)更快的方法可以做到这一点。它非常有效!谢谢我将测试它的性能,因为我可能每秒使用25次。。。我将给出一些反馈,说明这个函数在每秒调用25次时会表现得非常好。而且,没有一种(明显)更快的方法可以做到这一点。它非常有效!谢谢我将测试它的性能,因为我可能每秒使用25次。。。我将给出一些反馈,说明这个函数在每秒调用25次时会表现得非常好。而且,没有一种(明显)更快的方法可以做到这一点。它非常有效!谢谢我将测试它的性能,因为我可能每秒使用25次。。。我会给出一些反馈,这个函数在被调用25次后会表现得非常好