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 语句中混合了 update
和 insert
?或者这不是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; }
我的代码中有一个未定义的 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 语句中混合了 update
和 insert
?或者这不是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; }