Member 14719507 Ответов: 1

Firefox выдает ошибку размера распределения в строке шаблона


hey guys i dont seem to know whats the problem here,

never encountered before, i get allocation size error in the 
console, and the IDE telling me the string too long too,

second question is how do i apply this shuffle function into the code?

       var gNums = []
    var gInterval = null
    var gBoard = creatBoard()
    
    
    renderBoard()
    function renderBoard() {
        strHtml = ''
        for (var i = 0; i < gBoard.length; i++) {
            var row = gBoard[i]
            strHtml += '<tr>'
            for (var j = 0; j < row.length; i++) {
                cellvalue = row[j].value
                var className = (row[j].isClicked) ? 'clicked' : ''
                strHtml += `
                <td class="${className}" onclick="numClicked(this)">
                ${cellvalue}
                </td> `
    
            }
            strHtml += `</tr>`
        }
        var ElBoard = document.querySelector('.board')
        ElBoard.innerHTML = str.strHtml
    
    }
    
    
    
    function creatBoard(difficulty = 16) {
        resetNums()
        var board = []
        for (var i = 0; i < Math.sqrt(difficulty); i++) {
            board[i] = []
            for (var j = 0; j < Math.sqrt(difficulty); j++) {
                board[i][j] = creatCell()
            }
    
        } return board
    
    }
    
    
    
    function creatCell() {
        var num = gNums.splice(gNums.length - 1, 1)
        return {
            value: Number(num),
            isClicked: false
        }
    }
    
    
    
    
    
    resetNums()
    function resetNums(difficulty = 16) {
        gNums = []
        for (var i = 0; i <= difficulty; i++) {
            gNums.push(i)
        }
        return gNums
    }
    
    
    
    
    function shuffle(array) {
        var m = array.length, t, i;
        while (m) {
            i = Math.floor(Math.random() * m--);
            t = array[m];
            array[m] = array[i];
            array[i] = t;
        }
    
        return array;
    }


Что я уже пробовал:

я попробовал разбить строку пробелами для большей читабельности и найти ошибку, которая выглядит нормально.

1 Ответов

Рейтинг:
10

Thomas Daniels

Этот вопрос о переполнении стека[^] представляет собой очень похожий случай на ваш. Смотрите первый ответ там-конкатенация строки в цикле-это не очень хорошая идея. Лучше сохранить массив, поместить в него все строковые части и использовать .join после цикла, чтобы объединить все это вместе.


Member 14719507

можете ли вы показать мне решение по этому коду? я посмотрел на ответ и не могу найти способ исправить свой
в принципе, мне нужно сохранить весь строковый литерал в верхней части функции вне циклов, создать пустой массив и вставить в него этот строковый шаблон?
однако переменные внутри шаблона не изменяются ,если он находится вне цикла, они остаются статичными.
также ответ на второй вопрос был бы более чем желанным помощником :D

Thomas Daniels

теперь у вас есть strHtml = '' и strHtml += something. Замените это первое на strParts = [] а второй с strParts.push(something) После завершения цикла вы можете сделать strHtml = strParts.join("");

Что касается второго вопроса, то я не знаю, что вы имеете в виду. Вы можете просто сделать shuffle(yourArray);.