我有此數組: [1,2,3,4,5]陣列位置差
欲確定兩個元件之間的位置差,但在「旋轉」模式。
例子: 我有3個,我想知道有多遠2,我做了3.position - 2.position,和我有1
但是,如果我有5個,和我想知道在位置和位置之間的位置差異,與先例的差異,我將有5-1 = 4,因爲有陣列旋轉,我想要1.
你有什麼想法我該如何做到這一點? (我在Javascript工作)
編輯: 這裏是可以解釋更清楚我想要做的
EDIT 2平局:更好的借鑑
我有此數組: [1,2,3,4,5]陣列位置差
欲確定兩個元件之間的位置差,但在「旋轉」模式。
例子: 我有3個,我想知道有多遠2,我做了3.position - 2.position,和我有1
但是,如果我有5個,和我想知道在位置和位置之間的位置差異,與先例的差異,我將有5-1 = 4,因爲有陣列旋轉,我想要1.
你有什麼想法我該如何做到這一點? (我在Javascript工作)
編輯: 這裏是可以解釋更清楚我想要做的
EDIT 2平局:更好的借鑑
陣列內計算兩者的距離,纏繞時的距離,並使用最小的。
該代碼使用pos1
和pos2
作爲數組arr
中的項目的指標,並假定pos1 < pos2
:
var distance = Math.min(pos2 - pos1, pos1 + arr.length - pos2);
它很棒!謝謝 ! 我會測試它的性能,因爲我可能會使用它大約每秒25次...我會給出一些關於該反饋的信息 – maxime 2015-02-06 20:00:07
這個函數將以每秒25次的速度完成很好的性能。而且,這樣做並不是一個(非常快)的方法。 – 2015-02-06 20:22:57
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/
你提的問題是非常不清楚。你究竟想在這裏做什麼?這將是有見識的知道,並會幫助我們回答你的問題。 – 2015-02-06 19:49:09
@thijs:找出兩個數組元素之間的最短距離,假裝數組是一個圓,這樣就有了隱形的'......,5,1,2,3,...' – 2015-02-06 19:49:58
好吧,對不起我的英文。我會畫出來,它會更清晰。 – maxime 2015-02-06 19:50:08