我正在嘗試制作掃雷器,但發生了一些奇怪的事情,在基于 Chrome 或 Chromium 的導航器中,一切看起來都很好,但在 Firefox 中,所有生成的炸彈在末尾或陣列的開頭都聚集在一起, sort() 如何處理引數有什么不同嗎?
我將留下生成板的代碼。
function createBoard() {
//create an array with shuffled bombs
const bombsArray = Array(bombAmount).fill("bomb");
const emptyArray = Array(width * width - bombAmount).fill("valid");
const gameArray = emptyArray.concat(bombsArray);
const shuffledArray = gameArray.sort(() => Math.random() - 0.5);
for (let i = 0; i < width * width; i ) {
const square = document.createElement("div");
square.setAttribute("id", i);
square.classList.add(shuffledArray[i])
grid.appendChild(square);
squares.push(square);
uj5u.com熱心網友回復:
從檔案中:
注意:
compareFunction(a, b)當給定一對特定的元素 a 和 b 作為其兩個引數時,必須始終回傳相同的值。
在您的情況下,您不這樣做,這會產生未定義的行為,很可能取決于瀏覽器Array.sort實作使用的排序演算法。
您可以通過映射到具有隨機order屬性的新陣列、排序、然后再次映射回來確保特定陣列項的隨機值保持穩定:
const shuffledArray = gameArray
.map((value) => ({ value, order: Math.random() }))
.sort((a, b) => a.order - b.order)
.map(({ value }) => value)
這可能不是洗牌陣列的最有效方法,但掃雷板太小了,這無關緊要。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/410621.html
標籤:
