Javascript разделить строки из файла CSV на основе значения в первом столбце - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь разделить 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 до следующего нуля, после чего каждый блок разделенных данных сохраняется в массиве для отображения на веб-странице.

Я могу получить доступ к первой строке из цикла 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 ]

0 голосов
/ 21 января 2019

Вы можете проверить первое значение внутренних массивов и добавить новый массив в результирующий набор.

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; }
0 голосов
/ 21 января 2019
// 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);
        }
    });
0 голосов
/ 21 января 2019

используйте это

// 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);
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...