下面的函数将csv文件解析为数组,因此它看起来像
[[1,56.79],[2,57.50],[3,71.60],[4,69.10]]
function CSVToArray (csvString) {
var arrData = [[]];
var rows = csvString.match(/[^\r\n]+/g);
var len = rows.length
for (var i=0; i<len; ++i)
{
var cols = rows[i].split(",")
arrData[ arrData.length - 1 ].push( parseFloat(cols[0]) );
arrData[ arrData.length - 1 ].push( parseFloat(cols[1]) );
if (i<(len-1))
{
arrData.push( [] );
}
}
return( arrData );
};
我试图修改它,这样如果没有类似
的数据,我可以在数组中有空值 [[1,56.79],[2,57.50],null,[3,71.60],null,[4,69.10]]
我已经尝试了以下但无法使其正常工作
function CSVToArray (csvString) {
var arrData = [[]];
var rows = csvString.match(/[^\r\n]+/g);
var len = rows.length
for (var i=0; i<len; ++i)
{
var cols = rows[i].split(",")
if (cols[1] != "")
{
arrData[ arrData.length - 1 ].push( parseFloat(cols[0]) );
arrData[ arrData.length - 1 ].push( parseFloat(cols[1]) );
arrData.push( [] );
}
else
{
arrData.push( null);
}
}
return( arrData );
};
有人可以告诉我如何在数组中得到null而不是null吗?
基本上,我试图让数据结构正确,以便能够执行此操作http://jsfiddle.net/KhpCE/1/
答案 0 :(得分:2)
使用此:
function CSVToArray (csvString) {
var arrData = [];
var rows = csvString.split(/\r?\n/);
// console.log(rows)
var len = rows.length
for (var i=0; i<len; ++i)
{
var cols = rows[i].split(",")
// console.log(cols)
var temp = []
if (cols.length == 2 && cols[1] != "" && cols[0] != "")
{
temp.push( parseFloat(cols[0]) );
temp.push( parseFloat(cols[1]) );
}
else
{
temp = null;
}
arrData.push(temp);
}
return( arrData );
};
答案 1 :(得分:1)
不是事先为下一个项目推送一个空数组,只需创建每个项目的数组并推送它,然后推送空值而不是项目很简单:
function CSVToArray (csvString) {
// an array without the prefilled empty item array
var arrData = [];
var rows = csvString.match(/[^\r\n]+/g);
var len = rows.length
for (var i=0; i<len; ++i) {
var cols = rows[i].split(",");
if (cols[1] != "") {
// create an array and push it
arrData.push([
parseFloat(cols[0]),
parseFloat(cols[1])
]);
} else {
arrData.push(null);
}
}
return arrData;
}
答案 2 :(得分:1)
这是困扰你的match
。 /[^\r\n]+/g
上的匹配结果会丢失csvString
的空行。我建议在这里使用split
。
此外,您的代码看起来很笨重。如何使用Array.map
1 :
function CSVToArray(csvString) {
var rows = csvString.split(/\n|\r\n/);
return rows.length ? [rows.map(function(s){
var cols = s.split(",").map(function(v){return Number(v)||null;});
return cols.length===2 ? cols: null;
})] : [];
};
//usage example
CSVToArray('1,2.1\n\n23.2\n3,4\n5.34,6');
//=> [[2,2.1],null,null,[3,4],[5.34,6]]
1 Here您可以找到旧版浏览器的Array.map
垫片