Неопределенная переменная массива в javascript - PullRequest
1 голос
/ 26 апреля 2020

В моем коде есть неопределенная javascript ошибка. Я не могу найти причину проблемы. Я загружаю файл CSV с ajax и анализирую по строкам и столбцам, разделенным вкладками. Все хорошо, но я получил только одну неопределенную переменную.

Чего мне не хватает? пожалуйста, сообщите мне.

мой файл данных выглядит следующим образом:

Thành phố Hà Nội    01  Quận Ba Đình    001 Phường Phúc Xá  00001   Phường
Thành phố Hà Nội    01  Quận Ba Đình    001 Phường Trúc Bạch    00004   Phường
Thành phố Hà Nội    01  Quận Ba Đình    001 Phường Vĩnh Phúc    00006   Phường

и мой javascript код ниже:

   $(function() {
    var fileName = "data.txt";

    $.ajax({
        url: fileName,
        dataType: 'text',
        success: function(data) {
            var lines = data.split('\n');
            //console.log(lines);

            $('h1').text(lines.length + ' lines');

            //var cols = [];
            var cols = new Array();
            var col_name = new Array();
            //var col_name = [];



            for (var i = 0; i < lines.length; i++) {

                var cells = lines[i].split('\t');

                for (var j = 0; j < cells.length; j++) {

                    cells[j] = $.trim(cells[j]);

                    if(j == 0) col_name[j] = 'state';
                    if(j == 1) col_name[j] = 'code1';
                    if(j == 2) col_name[j] = 'province';
                    if(j == 3) col_name[j] = 'code2';
                    if(j == 4) col_name[j] = 'area';
                    if(j == 5) col_name[j] = 'code3';
                    if(j == 6) col_name[j] = 'street';

                    cols[i] += col_name[j] + '=\'' + cells[j] + '\', ';   

                }

                cols[i] = cols[i].replace(/\,+$/, '');
                cols[i] = cols[i].slice(0, -2);


                str = "INSERT INTO table SET " + cols[i] + ";";
                $('ul').append('<li>' + str + '</li>');

            }

        }
    });

});

Результат моего кода ниже :

INSERT INTO table SET **undefined**state='Thành phố Hà Nội', code1='01', province='Quận Ba Đình', code2='001', area='Phường Phúc Xá', code3='00001', street='Phường';
INSERT INTO table SET **undefined**state='Thành phố Hà Nội', code1='01', province='Quận Ba Đình', code2='001', area='Phường Trúc Bạch', code3='00004', street='Phường';
INSERT INTO table SET **undefined**state='Thành phố Hà Nội', code1='01', province='Quận Ba Đình', code2='001', area='Phường Vĩnh Phúc', code3='00006', street='Phường';

Как вы видите результат, в каждой строке не определено.

1 Ответ

1 голос
/ 26 апреля 2020
cols[i] += col_name[j] 
//      ^ The undefined comes from the +=
//        cols[i] is undefined here, so 
//        you're adding a string to that

Вы смешиваете update с insert в выражении sql? Или это не sql?

Вот фрагмент кода, который упрощает вашу функцию обработки данных. Он создает действительные sql операторы вставки. Может быть, это полезно.

const txt = `Thành phố Hà Nội    01  Quận Ba Đình    001 Phường Phúc Xá  00001   Phường
Thành phố Hà Nội    01  Quận Ba Đình    001 Phường Trúc Bạch    00004   Phường
Thành phố Hà Nội    01  Quận Ba Đình    001 Phường Vĩnh Phúc    00006   Phường`;

console.log(processTxt(txt));

function processTxt(data) {
  const lines = data.split(/\n/);
  const col_names = ['state', 'code1', 'province', 'code2', 'area', 'code3', 'street'];
  let tableInsertLines = [];
  
  for (var i = 0; i < lines.length; i++) {
    const cells = lines[i].split(/\s+|\t/).slice(0, col_names.length);
    tableInsertLines.push(`INSERT INTO some_table (${col_names}) values('${
      cells.join("','")}');`);
  }
  return tableInsertLines;
}
.as-console-wrapper { top: 0; max-height: 100% !important; }
...