5

I have two arrays, one which holds the keys and one which holds arrays, each array containing values. I would like to make an array of objects, where each object pairs the keys and values. To do this, I created an array, and I am now trying to create and fill objects before pushing them into the array. My code looks similar to this:

var keys = [key1, key2, key3];
var values = [
                [A-value1, A-value2, A-value3],
                [B-value1, B-value2, B-value3],
                [C-value1, C-value2, C-value3]
             ];

var arrayOfObjecs = [];
for(var i=0; i<values.length; i++){
    var obj = {
    for(var j=0; j<values[i].length; j++){
            keys[j] : values[i][j];
    }
    };
    arrayOfObjects.push(obj);
}

In the end, I would like for my arrayOfObjects to look like this:

var arrayOfObjects = [
                        {
                         key1 : A-value1,
                         key2 : A-value2,
                         key3 : A-value3
                        },
                        {
                         key1 : B-value1,
                         key2 : B-value2,
                         key3 : B-value3
                        },
                        {
                         key1 : C-value1,
                         key2 : C-value2,
                         key3 : C-value3
                        }
                     ];

This question is similar to what I want to do, yet it won't allow me to loop a second time within the object.

2

3 Answers 3

7

Your question is in fact about the object properties square bracket notation :
using object[propertyname] is the same as using object.propertyname.

var myObj  = {};
myObj['x'] = 12;
console.log(myObj.x);  -->> prints 12

Now in your code :

var arrayOfObjects = [];
for(var i=0; i<values.length; i++){
    var obj = {};
    for(var j=0; j<values[i].length; j++){
         obj[keys[j]] = values[i][j];  
      }
    arrayOfObjects.push(obj);
}

In reply to 'it does weird things' : this code works.

with this input :

var keys = ['key1', 'key2', 'key3'];
var values = [
            [12,112, 1112],
            [31, 331, 3331],
            [64, 65, 66]
         ];

the output is :

   {   {key1: 12, key2: 112, key3: 1112},  
       {key1: 31, key2: 331, key3: 3331},   
       {key1: 64, key2: 65, key3: 66}        }

fiddle is here : http://jsfiddle.net/fyt8A/

Sign up to request clarification or add additional context in comments.

3 Comments

That does weird things… you're iterating over values and keys at the same time
it does just what is expected.
stackoverflow.com/revisions/17353800/1 did :-) Your edit hasn't been loaded when I commented.
1

try:

var arrayOfObjecs = values.map(function(value_set){
                                  var obj = {}; 
                                  for(i = 0; i < keys.length; i++ )
                                        obj[keys[i]]=value_set[i];      
                                  return obj;})

map is a great function for looping over arrays

Comments

0

You're on the right track.

…
    var obj = {
    for(var j=0; j<values[i].length; j++){
        keys[j] : values[i][j];
    }
    };
…

That's a syntax error. You can't put the for-loop in the middle of the object literal. Instead, create the empty object in one step and then fill it with the properties by assignment (using bracket notation) in the loop:

…
    var obj = {};
    for(var j=0; j<values[i].length; j++){
         obj[keys[j]] = values[i][j];
    }
…

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.