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

Slow Android emulator

I have a 2.67 GHz Celeron processor, 1.21 GB of RAM on a x86 Windows XP Professional machine. My understanding is that the Android emulator should start fairly quickly on such a machine, but for me it does not. I have followed all instructions in setting up the IDE, SDKs, JDKs and such and have had some success in staring the emulator quickly but is very particulary. How can I, if possible, fix this problem?