开发者问题收集

JavaScript 中未定义的数组变量

2020-04-26
256

我的代码中有一个未定义的 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';

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

1个回答
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; }
KooiInc
2020-04-26