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?
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(",").
ReplyDeletevar 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']).
var arr = "-0.0020057306590257895, 50, 0.09598853868194843, 50, 0.19398280802292264, 49.99999999999999, 0.2919770773638969, 50".split(",");
ReplyDeletevar 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.
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
ReplyDeletevar 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