簡體   English   中英

JavaScript數組隨機播放不應彼此相鄰輸出兩個

[英]Javascript array shuffle shouldn't output two next to eachother

我得到了一個充滿一些字母的數組。 請參見下面的示例。 首先,我想讓陣列變得混亂。 好吧,我發現了最著名的混排,稱為Fisher-Yates混排。

現在,我希望在輸出時,例如F2不應緊鄰FF' 其他也一樣。 D不應靠近D2D'

它應該輸出例如:R B2 UFLF D2 ....依此類推。

而不是:R B2 B'LF D2 ...

任何幫助,建議嗎? 我知道我應該使用charAt()檢查第一個字符,但我不是該函數的專家。

Java腳本

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);

您可以隨機播放,檢查約束,如果不滿足約束,則重復。 您檢查約束的方法可以是

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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM