Привет, милые технари,
При создании пользовательской карты бинго в React JS мне приходилось перетасовывать (5 * 5 = 25 ячеек) игровое поле каждый раз, когда игра обновлялась, т.е. когда компонент монтировался, используя хук componentDidMount().
Это была следующая слегка модифицированная функция Фишера-Йейтса, которую я придумал, обратите внимание, что ячейка с индексом 12 (средняя ячейка) не была кликабельной, статической и должна была быть частью индексов выигрышных комбинаций.
export function shuffleArray(array, n) {
let i = array.length - 1;
for (; i > 0; i--) {
let j = Math.floor(Math.random() * (i + 1));
if(i === n || j === n) continue;
let temp = array[i];
array[i] = array[j];
array[j] = temp;
}
return array;
}
// n был порядковым номером, который не предназначался для перемешивания
// перетасовывать доску, за исключением средней индексированной ячейки, каждый раз, когда компонент монтируется
componentDidMount() {
const shuffledPosts = shuffleArray(this.state.board, 12)
this.setState({
board: shuffledPosts
});
}
Надеюсь, это помогло