2014-10-08 50 views
0

我得到了一個數組,它充滿了一些字母。 請參閱下面的示例。 首先,我希望數組正在洗牌。好吧,我找到了最有名的洗牌機,叫做Fisher-Yates shuffle。Javascript陣列shuffle不應該輸出兩個旁邊的海誓山盟

現在我希望當它輸出時,例如F2不應該在FF'旁邊。 其他的一樣。 D不應該接近D2D'

它應該輸出例如: R B2 U F L F D2 ....等等。

,而不是,R B2 B」大號˚FD2 ......

任何幫助,建議?我知道我應該檢查與charAt()的第一個字符,但我不是那個功能的專家。

的Javascript

function shuffle(sides) { 
    var elementsRemaining = sides.length, temp, randomIndex, last; 
    while (elementsRemaining > 1) { 
     randomIndex = Math.floor(Math.random() * elementsRemaining--); 
     if (randomIndex != elementsRemaining) { 
     temp = sides[elementsRemaining]; 
     sides[elementsRemaining] = sides[randomIndex]; 
     sides[randomIndex] = temp; 
     } 
    }; 
} 

    return sides; 
} 

var sides = ["F ", "R ", "U ", "L ", "D ", "F2 ", "R2 ", "U2 ", "L2 ", "D2 ", "F' ", "R' ", "U' ", "L' ", "D' "]; 
shuffle(sides); 
$('#scramble').html(sides); 
+0

你是說你要保證洗牌後的數組中沒有連續的項目嗎? – 2014-10-08 17:53:12

+0

是的,正確的。這就是我想要的。 – user3613655 2014-10-08 17:56:02

回答

2

您可以隨機播放,請檢查您的約束和重複如果沒有遇到限制。你的檢查約束的方法可以是

var passesConstraint = function(sides) { 
    for(var i = 0; i < sides.length - 1; i++) { 
     if (sides[i][0] === sides[i+1][0]) { 
      return false; 
     } 
    } 
    return true; 
} 

你不需要做charAt(),字符串也可以用[]符號來訪問。

shuffle(sides) 
while (!passesConstraint(sides)) { 
    shuffle(sides) 
} 
+0

owh大聲笑它的作品!謝謝!! – user3613655 2014-10-08 19:58:49