【问题标题】:Extra newline characters in JavaScript arraysJavaScript 数组中的额外换行符
【发布时间】:2013-07-18 17:39:07
【问题描述】:

我正在开发一个程序,该程序解析 CSV 文件,然后将相应的数据移动到不同的数组中,这些数组将用它们制作电子表格。但是,我的电子表格有额外的空白行,每行一个单元格。经过进一步检查,我发现这些额外的单元格每个都包含一个换行符。我已经过滤了我的数组,使它们不包含任何换行符,但问题仍然存在。我正在与 AngularJS 一起执行此操作,虽然我怀疑这是导致问题的原因,但在实现 Angular 之前我没有遇到此问题。

以前有人遇到过这种情况吗?在不应该出现的地方动态创建换行符。

这是我的一些代码:

        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));
            }
        };

breakText 是一个 2D 数组,其中包含我已删除内容的未定义区域。所以上面的代码创建了一个新的标题数组和另一个二维数组来保存每个人的数据数组,所有这些都没有未定义的空格。这些数组包含空白"" 以及数据,但没有\n\r\n

这是 AngularJS 实现的一部分:

$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)
        };
    });
});

我们尝试使用替换函数将\n 替换为'',如果它是'',则不允许它返回数据,但这会导致问题,因为我们的一些初始数据也是空白的。它也不会停止新单元格的创建。 我们还尝试将其包装在诸如 if(data !== '\n') 之类的东西中,但这并没有改变。

编辑1

您可以在here 看到它在现场工作,但它被设计为与这个可以下载here 的小 CSV 文件一起使用。 上传文件后表格下方的文字显示了每个单元格绑定的内容,如果单击并编辑单元格,您可以看到内容动态变化。通过单击行之间的额外单元格,您可以看到它们包含换行符。

我刚刚尝试创建一个新的过滤器函数,它会检查clearPatients 数组中的换行符,然后将所有内容过滤到一个新数组中,即无换行符。然后将这个新数组调用到表中,而不是带有换行符的数组。然而,这引发了许多无法确定其来源的错误。

编辑2

在 Mike P 的回答和其他一些输入之后,确定解决此问题的最佳方法是交换行 var allTextLines = $scope.csv.split(/\r\n|\n/); 使用正则表达式/\r?\n/

感谢您的帮助!

【问题讨论】:

  • 您能否提供一个 JSFiddle 或 Plnkr 来演示正在发生的事情?
  • 在拆分 CSV 后,电子表格控制器.js 的第 31 行的 allTextLines 变量中有一些新行。您将需要检查您的正则表达式或至少遍历该字符串数组并清除那些不需要的行。我会尝试发布调试的屏幕截图。
  • 我建议您查看我发布的关于解析 CSV 数据的 JS 代码的链接。许多人讨论了为什么不应该将 split() 方法用于此任务,并且提供了几种 CSV 解析器的实现,可以让您的生活更轻松。

标签: javascript angularjs newline


【解决方案1】:

您的问题看起来与 AngularjS 无关。您在 $scope.csv 中获得了文本数据,然后拆分了正则表达式,这会在 allTextLines 中创建一个字符串数组。

这个字符串数组中有一些无用的行(在 idx 1、3 和 4 处)。所以你要么想修改你的正则表达式拆分表达式,要么循环遍历这个数组并删除你不想要的东西。

你可能想看看这个人的 CSV to Array JS 代码@Javascript code to parse CSV data

我可以清楚地看到您的电子表格代码为 allTextLines 的这些部分创建行和单元格。因此,删除这些,您就可以开展业务了。

【讨论】:

  • 不管怎样,使用 split() 似乎是解析 CSV 数据最受鄙视的方法之一。
猜你喜欢
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多