Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert array values to object keys

I do a get which returns me a json object like so:

"data": [
  [
    "2016 Pass/Fail Rates by Test Centre",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    "",
    ""
  ],
  [
    "",
    "Passes",
    "",
    "No ID",
    "",
    "Fails",
    "",
    "Fail Dangerous",
    "",
    "Total"
  ],
  [
    "Sometown",
    "8,725",
    "53.40%",
    "140",
    "0.90%",
    "7,417",
    "45.40%",
    "48",
    "0.30%",
    "16,330"
  ],
  [
    "Some Other Town",
    "12,778",
    "44.80%",
    "193",
    "0.70%",
    "15,422",
    "54.10%",
    "103",
    "0.40%",
    "28,496"
  ],
  [...many more identically formatted arrays...]

and I would like to end up with:

[{
    "Location": "Sometown",
    "Passes": 8,
    725,
    "Pass%": 53.40 % ,
    "No ID": 140,
    "NoID%": 0.90 % ,
    "Fails": 7,
    417,
    "Fail%": 45.40 % ,
    "Fail Dangerous": 48,
    "FailDangerous%": 0.30 % ,
    "Total": 16,
    330
  }, {
    "Location": "Some Other Town",
    "Passes": 8,
    725,
    etc etc...

So I want to ignore the first array inside the "data" array, use the values of the second array as keys (and replace the empty strings with something more useful) and the values in all remaining arrays as values in the resulting object.

So it is quite the multipart problem, though I suspect a fairly simple one. What is the simplest way to do that - and if different, what is the leanest way to do it in terms of processing/page load?

Thanks in advance,

like image 388
protoskull Avatar asked Mar 31 '17 09:03

protoskull


1 Answers

You can iterate over your array while adding your index and value into an object...

You can find an example on how you can iterate objects and arrays here and an example here

Generally, to add an item to object

var array = [{"Location":"Sometown"}, {"Location2":"Sometown2"},    {"Location3":"Sometown3"}],
object = {};
array.forEach(function(element, index) {
    object[index] = element;
});
console.log(object);
like image 199
McKabue Avatar answered Oct 19 '22 23:10

McKabue