I'm new to javascript. Someone please show me how to store a map in local storage. Below is what I've tried. After storing I don't seem to be able to iterate the map keys. UDATE2: IT MIGHT BE THE serializeObject function. Why am I using this function? Otherwise when I post in AJAX, I get: Uncaught TypeError: Converting circular structure to JSON
UPDATE: LOOKS LIKE THE PROBLEM IS BEFORE IT EVER GOES INTO LOCAL STORAGE.
var reportId = getGUID();
var theReports = localStorage.getItem('reports');
if (theReports == null) {
    theReports = {};
}
theReports[reportId] = JSON.stringify($('#reportInfo').serializeObject());
// HERE ALSO I AM SEEING HUNDREDS OF FIELDS. I EXPECTED JUST reportID. I AM NOT SEEING THE KEY reportId. THIS IS BEFORE IT GOES INTO LOCAL STORAGE.
for (var prop in theReports)
{
   console.log(prop);
}
localStorage.setItem('reports', JSON.stringify(theReports));
var tReports = localStorage.getItem('reports');
// This prints out 1,2,3,...500 for every field in #reportInfo form 
// What I was expecting is reportId1, reportId2 etc. and definitely not the id of each field of the report itself!
for (var property in tReports) {
    if (tReports.hasOwnProperty(property)) {
        console.log(property);
    }
}
Here is the serializeObject function. Perhaps this is the problem.
$(function() {
  $.fn.serializeObject = function(){
  var self = this,
  json = {},
  push_counters = {},
  patterns = {
  "validate": /^[a-zA-Z][a-zA-Z0-9_]*(?:\[(?:\d*|[a-zA-Z0-9_]+)\])*$/,
  "key":      /[a-zA-Z0-9_]+|(?=\[\])/g,
  "push":     /^$/,
  "fixed":    /^\d+$/,
  "named":    /^[a-zA-Z0-9_]+$/
  };
  this.build = function(base, key, value){
  base[key] = value;
  return base;
  };
  this.push_counter = function(key){
  if(push_counters[key] === undefined){
  push_counters[key] = 0;
  }
  return push_counters[key]++;
  };
  $.each($(this).serializeArray(), function(){
         // skip invalid keys
         if(!patterns.validate.test(this.name)){
         return;
         }
         var k,
         keys = this.name.match(patterns.key),
         merge = this.value,
         reverse_key = this.name;
         while((k = keys.pop()) !== undefined){
         // adjust reverse_key
         reverse_key = reverse_key.replace(new RegExp("\\[" + k + "\\]$"), '');
         // push
         if(k.match(patterns.push)){
         merge = self.build([], self.push_counter(reverse_key), merge);
         }
         // fixed
         else if(k.match(patterns.fixed)){
         merge = self.build([], k, merge);
         }
         // named
         else if(k.match(patterns.named)){
         merge = self.build({}, k, merge);
         }
         }
         json = $.extend(true, json, merge);
         });
  return json;
  };
 
     
     
    