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.