代码之家  ›  专栏  ›  技术社区  ›  user2963022

javascript根据第一列中的值从csv文件中拆分行

  •  1
  • user2963022  · 技术社区  · 6 年前

    我正在尝试将一个csv文件根据第一列中的vlue分组。然后将行存储在一个数组中,以便在网页上显示。 我对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分组到下一个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还不熟悉,很难弄清楚。 任何建议都将不胜感激。

    3 回复  |  直到 6 年前
        1
  •  1
  •   Nina Scholz    6 年前

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

    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
  •  0
  •   Ramesh Babu    6 年前

    用这个

    // 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
  •  0
  •   Bijay Yadav    6 年前
    // 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);
            }
        });