JS скрипт ведет себя по разному во время дебага и во время обычной работы

У меня задача, на стороне клиента взять записи из xlsx файла, преобразовать их в json нужного вида и отправить на сервер. Для этого использую библиотеку xlsx-js. Получаю нужны объект и в цикле прохожусь по всем доступным строкам и столбцам. При работе с таблицей с 3-10 строками скрипт работает корректно и правильно создает json. Когда же я открываю таблицу где 1000+ строк, в консоли отображается ошибка TypeError: book.Sheets[SheetName][cord] is undefined это undefined (в функциях readGeo, readProduct, readName,readPhone, readPhone). При этом когда я ставлю точку остановки и по шагово смотрю что происходит - алгоритм работает так как нужно.

function readGeo(book,row) {
    const cord = COLUMNGEO+row;
    let ret = book.Sheets[SheetName][cord].v;
    return ret;
}

function readProduct(book, row) {
    const cord = COLUMNPRODUCT+row;
    return book.Sheets[SheetName][cord].v;
}

function readName(book, row) {
    const cord = COLUMNNAME+row;
    return book.Sheets[SheetName][cord].v;
}

function readPhone(book, row) {
    const cord =COLUMNPHONE+row;
    return book.Sheets[SheetName][cord].v;
}

function readrow(book, row) {
    let lead = { 'geo' : readGeo(book,row),
                     'product' : readProduct(book,row),
                     'name' : readName(book, row),
                     'phone' : readPhone(book,row)
                    };
    return lead;
}

function getCountLeads(book) {
    let ref = book.Sheets[SheetName]["!ref"];
    let pattern = RegulerPatternForTable; 
    return ref.matchAll(pattern).next().value[1];
}

function ConvertToJson(book) { //извлекает в удобной структуре данные из книги
    let count = Number( getCountLeads(book) ); //определяем количество заполненных строк
    let result = {"leads" : []};
    for(let i=1;i<=count;i++) {
        result.leads.push(readrow(book, i));
    }
    return result;
}

Объясните почему так происходит, и как заставить работать нормально?


Ответы (1 шт):

Автор решения: Кирилл

Проблема была в выходе за пределы массива. Функция getCountLeads(book) берет количество строк по регулярному выражению const RegulerPatternForTable = /^A1:D(\d+)$/gm; на маленьких таблицах работало нормально но на таблице с 1000 строками результат получается 1221.

→ Ссылка