Javascript data loading - how to ignore headers and validate data

I upload a CSV file that looks like this in JavaScript:

user_id, aligned_audio_onset_sec, x, y
1, 1.3 , 0.3, 0.5
1, 5, 0.9, 0.3
3, 4, 0.5, 0.5

With this script:

$(function() {

var VAdata = $.get("./VAdata.data", function(data) {
  VAdata = data.split(/\r?\n/).map(pair => pair.split(/,/).map(Number));

  $('#log').text(JSON.stringify(VAdata));

  });
});

It works well, except that it does not ignore the headers, but I cannot figure out how to do this. I was also wondering if I can check to see if all lines are 4 in length and delete those that don't. (I can only think of copying line by line and only including full-length copy.)

Log outputs:

[[null,null,null,null],[1,1.3,0.3,0.5],[1,5,0.9,0.3],[3,4,0.5,0.5],[0]]
+4
source share
2 answers

Use Array#filterfor this.

VAdata = data
          .split(/\r?\n/)
          .filter((v, i) => i && v.split(/,/).length >= 4)
          .map(pair => pair.split(/,/)
          .map(Number));

var data = 'user_id, aligned_audio_onset_sec, x, y\n1, 1.3 , 0.3, 0.5\n1, 5, 0.9, 0.3\n3, 4, 0.5, 0.5';

var VAdata = data
  .split(/\r?\n/)
  .filter((v, i) => i && v.split(/,/).length >= 4)
  .map(pair => pair.split(/,/)
    .map(Number));

console.log(VAdata);
Run codeHide result

Where i && pair.split(/,/).length >= 4:

  • iwill be falsy when the 0first element is ignored.
  • v.split(/,/).length >= 4 .

Array#forEach, .

VAdata = [];
data.split(/\r?\n/)
    .forEach((pair, i) => { 
       let spl = pair.split(/,/);
       i && spl.length >= 4 && VAdata.push(spl.map(Number))
    });

var data = 'user_id, aligned_audio_onset_sec, x, y\n1, 1.3 , 0.3, 0.5\n1, 5, 0.9, 0.3\n3, 4, 0.5, 0.5';

var VAdata = [];
data.split(/\r?\n/)
  .forEach((pair, i) => {
    let spl = pair.split(/,/);
    i && spl.length >= 4 && VAdata.push(spl.map(Number))
  });

console.log(VAdata)
Hide result

NaN 0, :

...push(spl.map(v => Number(v) || 0))
+6

.slice(1), , .filter(e => e.length === 4), , :

$.get("./VAdata.data", function (data) {
  var VAdata = data
    .split(/\r?\n/)
    .slice(1)
    .map(pair => pair
      .split(/,/)
      .map(Number)
    ).filter(e => e.length === 4)
    
  $(function() {
    $('#log').text(JSON.stringify(VAdata))
  })
})
Hide result

-

var data = 'user_id, aligned_audio_onset_sec, x, y\n1, 1.3 , 0.3, 0.5\n1, 5, 0.9, 0.3\n3, 4, 0.5, 0.5'

console.log(data)

var VAdata = data
  .split(/\r?\n/)
  .slice(1)
  .map(pair => pair
    .split(/,/)
    .map(Number)
  ).filter(e => e.length === 4)

$(function() {
  console.log(VAdata)
  $('#log').text(JSON.stringify(VAdata))
})
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<pre id="log"></pre>
Hide result
+1

Source: https://habr.com/ru/post/1671680/


All Articles