JavaScript数组中的额外换行符
我正在开发一个程序,该程序解析CSV文件,然后将相应的数据移动到不同的数组中,从而生成电子表格。但是,我的电子表格有额外的空行,每个空行有一个单元格。经过进一步检查,我发现这些额外的单元格每个都包含一个换行符。我已经过滤了数组,使它们不包含任何换行符,但问题仍然存在。我和AngularJS一起做这件事,虽然我怀疑这是造成问题的原因,但在我实现AngularJS之前,我没有这个问题 以前有人吃过类似的东西吗?动态创建不应该出现的换行符 以下是我的一些代码:JavaScript数组中的额外换行符,javascript,angularjs,newline,Javascript,Angularjs,Newline,我正在开发一个程序,该程序解析CSV文件,然后将相应的数据移动到不同的数组中,从而生成电子表格。但是,我的电子表格有额外的空行,每个空行有一个单元格。经过进一步检查,我发现这些额外的单元格每个都包含一个换行符。我已经过滤了数组,使它们不包含任何换行符,但问题仍然存在。我和AngularJS一起做这件事,虽然我怀疑这是造成问题的原因,但在我实现AngularJS之前,我没有这个问题 以前有人吃过类似的东西吗?动态创建不应该出现的换行符 以下是我的一些代码: headers = br
headers = breakText[0];
function isDefined(element, index, array){
return (element !== undefined || element !=='\n');
//I tried to stop the newlines here, but this did nothing
};
//new header file including ONLY desired titles; no undefines
$scope.clearHeaders = headers.filter(isDefined);
$scope.clearPatients = [];
for(var i=1; i<breakText.length; i++){
if breakText[0] {
$scope.clearPatients.push(breakText[i].filter(isDefined));
}
};
我们已尝试使用替换函数将\n
替换为'
,如果数据为'
,则不允许其返回数据,但这会导致问题,因为我们的一些初始数据也是空的。它也不会停止新单元的创建。
我们也尝试过将它包装成if(data!=='\n')
之类的东西,但没有任何改变
Edit1:
你可以看到它的工作现场,但它的设计工作与这个小CSV文件,可以下载。
上传文件后,表格下方的文本显示每个单元格绑定到的内容,如果单击并编辑单元格,可以看到内容动态变化。通过单击行之间的额外单元格,可以看到它们包含换行符
我刚刚尝试创建了一个新的过滤函数,它将检查clearPatients
数组中的换行符,然后将所有内容过滤到一个新数组中,即sans newline。然后调用这个新数组以使其位于表中,而不是具有换行符的数组。然而,这引发了许多无法确定其来源的错误
Edit2:
在Mike p的回答和其他一些输入之后,确定解决此问题的最佳方法是交换行var allTextLines=$scope.csv.split(/\r\n | \n/)代码>
使用正则表达式/\r?\n/
谢谢你的帮助 你的问题似乎与AngularjS无关。您将文本数据保存在$scope.csv中,并拆分正则表达式,这将在所有文本行中创建一个字符串数组
这个字符串数组中有一些无用的行(IDX1、3和4)。因此,您可能需要修改正则表达式拆分表达式,或者通过该数组循环并删除不需要的内容
您可能想查看这家伙的CSV到Array JS code@
我可以清楚地看到您的电子表格代码为所有文本行的这些部分创建行和单元格。所以,去掉这些,你就开始做生意了
有没有可能提供一个JSFIDLE或Plnkr来演示正在发生的事情?spreadsheetController.js第31行的allTextLines变量在拆分CSV后有了一些新行。您需要检查正则表达式,或者至少循环该字符串数组并清除那些不需要的行。我将尝试发布一个调试的屏幕截图。我敦促您查看我发布的关于JS代码解析CSV数据的链接。许多人已经讨论了为什么不应该将split()方法用于此任务,并且提供了几种CSV解析器的实现,它们可以让您的生活更加轻松。值得一提的是,使用split()似乎是解析CSV数据最受鄙视的方法之一。
$scope.columns = $scope.clearHeaders;
$scope.cells = {};
$scope.values = $scope.clearPatients.map(function(c,row){
return c.map(function(data){
return {
content: data,
color: $scope.makeColors(data)
};
});
});