title: Mapping JSON Objects to Javascript Objects
body: <p>When using AJAX, I tend to pass objects from my server to Javascript in the form of JSON objects (aka Javascript). Certain functions within my Javascript rely on the specific type of object I am using. For instance, lets use a phone number for example. I have a constructor:</p>
  
  <pre class="lang-js prettyprint-override"><code>function PhoneNumber(number, type, isPrimary, contactId, id, className) {
      this.number = number;
      this.type = type;
      this.isPrimary = isPrimary;
      this.contactId = contactId;
      this.id = id;
      this.className = className;
  }
  </code></pre>
  
  <p>Which I use when creating a phone number object in my Javascript. In some situations I don't create the object in JS, I get the object from the server so it comes in the form of a generic object with the exact same fields. So when my code relies on the specific type by using something such as this:</p>
  
  <pre class="lang-js prettyprint-override"><code>var objType = objArray[i].constructor.name;
  var mappedObj;
  
  switch(objType) {
      case 'PhoneNumber':
          currentArray = currentArray.phone;
          //Convert response to javascript object.
          mappedObj = mapPhone(jsonResponse[i]);
          break;
      case 'Email':
          currentArray = currentArray.email;
          mappedObj = mapEmail(jsonResponse[i]);
          break;
      case 'Address':
          currentArray = currentArray.address;
          mappedObj = mapAddress(jsonResponse[i]);
          break;
      case 'Website':
          currentArray = currentArray.website;
          mappedObj = mapWebsite(jsonResponse[i]);
  }
  </code></pre>
  
  <p>In this situation, I check the name of the objects constructor and set certain variables based on that name. If the object I check the name on is a JSON from the server, it simply gives me a generic "Object" response and thus the code does not work. I get around this by using a mapping function for each object such as:</p>
  
  <pre class="lang-js prettyprint-override"><code>function mapPhone(phoneObj) {
      var id = phoneObj.id;
      var contactId = phoneObj.contactId;
      var number = phoneObj.number;
      var type = phoneObj.type;
      var primary = phoneObj.isPrimary;
      var className = phoneObj.className;
      var phoneNumber = new PhoneNumber(number, type, primary, contactId, id, className);
      return phoneNumber;
  }
  </code></pre>
  
  <p>This works just fine, but to me seems a little redundant. Is this the best way to solve the JSON Object problem, or is there a better solution? I understand this is more of a "Am I doing this the best way possible" type of question, but I repeat this type of logic CONSTANTLY in my Javascript code and I figure I might as well get another opinion or two on whether or not its the proper way to do this before I have to spend hour upon hour fixing it in the future.</p>
  
  <p>EDIT: I ended up accepting a jQuery solution because I happen to use jQuery in my project. There are however multiple solutions that also worked for me before I found the jQuery option. They just weren't quite as clean and efficient.</p>