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

[韓日関係] 首相含む大幅な内閣改造の可能性…早ければ来月10日ごろ=韓国

div not scrolling properly with slimScroll plugin

I am using the slimScroll plugin for jQuery by Piotr Rochala Which is a great plugin for nice scrollbars on most browsers but I am stuck because I am using it for a chat box and whenever the user appends new text to the boxit does scroll using the .scrollTop() method however the plugin's scrollbar doesnt scroll with it and when the user wants to look though the chat history it will start scrolling from near the top. I have made a quick demo of my situation http://jsfiddle.net/DY9CT/2/ Does anyone know how to solve this problem?

Why does this javascript based printing cause Safari to refresh the page?

The page I am working on has a javascript function executed to print parts of the page. For some reason, printing in Safari, causes the window to somehow update. I say somehow, because it does not really refresh as in reload the page, but rather it starts the "rendering" of the page from start, i.e. scroll to top, flash animations start from 0, and so forth. The effect is reproduced by this fiddle: http://jsfiddle.net/fYmnB/ Clicking the print button and finishing or cancelling a print in Safari causes the screen to "go white" for a sec, which in my real website manifests itself as something "like" a reload. While running print button with, let's say, Firefox, just opens and closes the print dialogue without affecting the fiddle page in any way. Is there something with my way of calling the browsers print method that causes this, or how can it be explained - and preferably, avoided? P.S.: On my real site the same occurs with Chrome. In the ex