Skip to main content

Splitting a CSV into an object with javascript/jquery



I have an ordered array which looks like this:-







[-0.0020057306590257895, 50, 0.09598853868194843, 50, 0.19398280802292264, 49.99999999999999, 0.2919770773638969, 50]







What I would like to do is the following:





  • Take each 'odd' entry and make it the 'key index in an object, which can be achieved by rounding the value and multiplying by 10 e.g. (Math.round(-0.0020057306590257895 * 10) should be index 0 and Math.round(0.09598853868194843 * 10) should be index 1 etc)



  • Take the 'even' values and make them the corresponding values in the object.







So...





The above CSV file should return the following object:-







{

0: 50,

1: 50,

2: 49.99999999999999,

3: 50

}







Does anyone one know how I can parse this CSV to produce the required array using either jQuery or plain javascript?


Comments

  1. I'm going to assume you've done something to read the CSV file into a string since you said in the comments you tried using .split(",").

    var csv = "-0.0020057306590257895, 50, 0.09598853868194843, 50, 0.19398280802292264, 49.99999999999999, 0.2919770773638969, 50";
    var arr = csv.split(",");
    var obj = {};
    for (var i = 0; i < arr.length - 1; i += 2) {
    obj[Math.round(arr[i] * 10)] = arr[i + 1];
    }


    You should probably check that there are an even number of elements in the array first with something like if (arr.length % 2 == 0).

    The things you should walk away with are:


    {} curly braces are used to define an object, a pair of empty braces means the same thing as new Object() but using the braces is recommended.
    [] square brackets can be used define an array or address both the elements of an array by their index (like arr[0]) and the properties of an object by their key (like obj['name']).

    ReplyDelete
  2. var arr = "-0.0020057306590257895, 50, 0.09598853868194843, 50, 0.19398280802292264, 49.99999999999999, 0.2919770773638969, 50".split(",");
    var obj = {};

    for (index = 0; index < arr.length - 1; index += 2) {
    var key = Math.round(parseFloat(arr[index]) * 10);
    var value = Math.round(parseFloat(arr[index + 1]) * 10);
    obj[key.toString()] = value.toString();
    }


    To get the value:

    var keyVal = obj[key];


    To delete a key value pair:

    delete obj[key];


    Hope this helps.

    ReplyDelete
  3. If your data structure is guaranteed to have a value for each integer (i.e. won't jump from say 3.9 straight to 5.9 in the even columns) you can save a bit of effort and use

    var arr = "-0.0020057306590257895, 50, 0.09598853868194843, 50, 0.19398280802292264, 49.99999999999999, 0.2919770773638969, 50".split(",");
    var result = [];

    for (index = 0; index < arr.length - 1; index += 2) {
    result.push(parseFloat(arr[index + 1]));
    }


    NB - this also has numbers rather than a strings as its values due to using parseFloat

    ReplyDelete

Post a Comment

Popular posts from this blog

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...

Is it possible to have IF statement in an Echo statement in PHP

Thanks in advance. I did look at the other questions/answers that were similar and didn't find exactly what I was looking for. I'm trying to do this, am I on the right path? echo " <div id='tabs-".$match."'> <textarea id='".$match."' name='".$match."'>". if ($COLUMN_NAME === $match) { echo $FIELD_WITH_COLUMN_NAME; } else { } ."</textarea> <script type='text/javascript'> CKEDITOR.replace( '".$match."' ); </script> </div>"; I am getting the following error message in the browser: Parse error: syntax error, unexpected T_IF Please let me know if this is the right way to go about nesting an IF statement inside an echo. Thank you.