javascript 中未定义的数组变量

Undefined array variable in javascript

我的代码中有一个未定义的 javascript 错误。我找不到导致问题的原因。 我使用 ajax 加载 CSV 文件并按制表符分隔的行和列进行解析。 一切正常,但我只有一个未定义的变量。

我错过了什么?请多多指教

我的数据文件如下所示:

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';

如您所见,每一行都有未定义。

cols[i] += col_name[j] 
//      ^ The undefined comes from the +=
//        cols[i] is undefined here, so 
//        you're adding a string to that

您在 sql 语句中混合了 updateinsert?或者这不是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; }