【问题标题】:Javascript split rows from csv file based on value in first columnJavascript根据第一列中的值从csv文件中拆分行
【发布时间】:2019-01-21 16:14:34
【问题描述】:

我正在尝试根据第一列中的 vlue 将 csv 文件拆分为多个组。然后将行存储在数组中以在网页上显示。 我是 javascript 新手,无法弄清楚。 我有一个具有以下结构的 csv 文件:

0,-1.0,0.0,0.0,0.0
1,0.0,0.0,0.0,0.0
0,-1.0,0.0,0.0,0.0
1,-1.0,0.0,0.0,0.0
2,0.0,0.0,0.0,0.0
0,-1.0,0.0,0.0,0.0
1,-1.0,0.0,0.0,0.0
2,-1.0,0.0,0.0,0.0
3,0.0,0.0,0.0,0.0
0,-1.0,0.0,0.0,0.0
1,-1.0,0.0,0.0,0.0
2,-1.0,0.0,0.0,0.0
3,-1.0,0.0,0.0,0.0
4,0.0,0.0,0.0,0.0

我正在尝试根据文件中第一列的值将数据行分成组。我正在尝试从 0 到下一个零进行分组,然后将每个拆分数据块存储在一个数组中,以便在网页上显示。

我能够从 for 循环中访问第一行并设置条件来检查值是否为 0,但我无法添加下一行直到检测到下一个 0。

到目前为止,请参阅下面的内容。

// AJAX in the data file
    $.ajax({
        type: "GET",
        url: "static/Dataframe.csv",
        dataType: "text",
        cache: false,
        success: function(data) {
            var arr1 = data.split(/\r\n|\n|\r/);
            var array2 = [];
            for (let i = 0; i < arr1.length; i++) {

                    arr1[i].split(',');
                    array2.push(arr1[i]);
                    if(arr1[i][0]== 0){
                        array2.pop()
                    }
            }
            // for debugging
            // document.getElementById("dialog").innerHTML = arr1;
            console.log(array2);
        }
    });

这是我目前得到的结果。

[0: "1,0.0,0.0,0.0,0.0"
1: "1,-1.0,0.0,0.0,0.0"
2: "2,0.0,0.0,0.0,0.0"
3: "1,-1.0,0.0,0.0,0.0"
4: "2,-1.0,0.0,0.0,0.0"
5: "3,0.0,0.0,0.0,0.0"
6: "1,-1.0,0.0,0.0,0.0"
7: "2,-1.0,0.0,0.0,0.0"
8: "3,-1.0,0.0,0.0,0.0"
9: "4,0.0,0.0,0.0,0.0"]

我需要的是:

[
    [0, -1.0, 0.0, 0.0, 0.0, 1, 0.0, 0.0, 0.0, 0.0],
    [0, -1.0, 0.0, 0.0, 0.0, 1, -1.0, 0.0, 0.0, 0.0, 2, 0.0, 0.0, 0.0, 0.0],
    [0, -1.0, 0.0, 0.0, 0.0, 1, -1.0, 0.0, 0.0, 0.0, 2, -1.0, 0.0, 0.0, 0.0, 3, 0.0, 0.0, 0.0, 0.0],
    [0, -1.0, 0.0, 0.0, 0.0, 1, -1.0, 0.0, 0.0, 0.0, 2, -1.0, 0.0, 0.0, 0.0, 3, -1.0, 0.0, 0.0, 0.0, 4, 0.0, 0.0, 0.0, 0.0]
]

我是 javaScript 的新手,我无法弄清楚这一点。 任何建议将不胜感激。

【问题讨论】:

  • 有什么作用吗?请添加一个想要的结果。
  • 对不起,我把它放进去。我现在就做。

标签: javascript jquery ajax csv


【解决方案1】:

您可以检查内部数组的第一个值并将新数组添加到结果集中。

var data = '0,-1.0,0.0,0.0,0.0\n1,0.0,0.0,0.0,0.0\n0,-1.0,0.0,0.0,0.0\n1,-1.0,0.0,0.0,0.0\n2,0.0,0.0,0.0,0.0\n0,-1.0,0.0,0.0,0.0\n1,-1.0,0.0,0.0,0.0\n2,-1.0,0.0,0.0,0.0\n3,0.0,0.0,0.0,0.0\n0,-1.0,0.0,0.0,0.0\n1,-1.0,0.0,0.0,0.0\n2,-1.0,0.0,0.0,0.0\n3, -1.0, 0.0, 0.0, 0.0\n4, 0.0, 0.0, 0.0, 0.0',
    result = data.split(/\r\n|\n|\r/).reduce((r, s) => {
        var array = s.split(',').map(Number);
        if (!array[0]) {
            r.push([]);
        }
        r[r.length - 1].push(...array);
        return r;
    }, []);

console.log(result.map(a => a.join(' ')));
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 谢谢妮娜。这正是我正在寻找的:)
【解决方案2】:

使用这个

// AJAX in the data file
    $.ajax({
        type: "GET",
        url: "static/Dataframe.csv",
        dataType: "text",
        cache: false,
        success: function(data) {
            var arr1 = data.split(/\r\n|\n|\r/);
            var array2 = [];
            for (let i = 0; i < arr1.length; i++) {
                    tmp =  arr1[i].split(',');
                    array2.push(tmp);
                    if(arr1[i][0]== 0){
                        array2.pop()
                    }
            }
            // for debugging
            // document.getElementById("dialog").innerHTML = arr1;
            console.log(array2);
        }
    });

【讨论】:

    【解决方案3】:
    // AJAX in the data file
    // Just removed the for loop with the length and see the modified code.
    $.ajax({
            type: "GET",
            url: "static/Dataframe.csv",
            dataType: "text",
            cache: false,
            success: function(data) {
                var arr1 = data.split(/\r\n|\n|\r/);
                var array2 = [];
                for (var items of arr1) {
                        tmp =  items.split(',');
                        array2.push(tmp);
                        if(items[0]== 0){
                            array2.pop()
                        }
                }
                // for debugging
                // document.getElementById("dialog").innerHTML = arr1;
                console.log(array2);
            }
        });
    

    【讨论】:

      猜你喜欢
      • 2017-10-10
      • 1970-01-01
      • 2020-05-20
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      • 2015-01-09
      相关资源
      最近更新 更多