2014-10-08 34 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