7

I need convert arrays inside my parent array to objects to match my database model data.

I have array like this:

emails: Array[2] 0: "[email protected]" 1: "[email protected]" id: 1 firstname: "Jane" lastname: "Doe 

What I want to achieve is to convert emails array to array of objects like this:

 emails: Array[2] 0: { name: "[email protected]" } 1: { name: "[email protected]" } id: 1 firstname: "Jane" lastname: "Doe 

I tried to use this code to convert array to object but for some reason it fails (no data are displayed -> variable rv is empty):

 var rv = {}; for (var i = 0; i < dbInfo.emails.length; ++i) if (dbInfo.emails[i] !== undefined) rv[i] = dbInfo.emails[i]; 

Does someone knows why my code fails and does someone knows solution for this type of problem?

Thanks advance.

4
  • stackoverflow.com/questions/2250953/…CommentedDec 29, 2014 at 19:37
  • this code doesn't end up with rv being empty, unless dbInfo.emails is empty. I just tested it.CommentedDec 29, 2014 at 19:47
  • I can't even make sense of the way the OP has presented the desired input and output
    – Alnitak
    CommentedDec 29, 2014 at 19:53
  • Is the goal here to store the name and multiple email addresses for a user? If so, the data structure should be changed. The id, firstname and lastname properties are fine, but you should have an email property that is an array, containing the multiple email addresses.CommentedDec 29, 2014 at 19:58

4 Answers 4

10

This is a perfect use for the Array.prototype.map function:

dbInfo.emails = dbInfo.emails.map(function(e) { return { name: e }; }); 

i.e. just convert each individual element of the array (e) into an object { name: email }

0
    5

    I think what are you looking for was angular.extend. For a good article about angular.extend click here. For documentation click here .

    var newObj = {}; angular.extend(newObj,[Array here]); 
      1

      You are putting the emails into an object. Instead, you want to wrap each email in its own object, and put it back in the array.

      for (var i = 0; i < dbInfo.emails.length; ++i) { if(dbInfo.emails[i] !== undefined) { dbInfo.emails[i] = { name: dbInfo.emails[i] }; } } 
        0

        this work perfectly //Option Select

         var range = []; for (var i=1; i<$scope.totalItems+1; i++) { range.push({value:i}); } console.log(range); 

          Start asking to get answers

          Find the answer to your question by asking.

          Ask question

          Explore related questions

          See similar questions with these tags.