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.

Community
  • 1
  • 1
user2465164
  • 917
  • 4
  • 15
  • 29
  • took me a few edits, but my answer should work now :) – Matthew Graves Jun 27 '13 at 21:45
  • See similar question [Easiest way to interate over a complex JSON object via Javascript](http://stackoverflow.com/questions/17192051/easiest-way-to-interate-over-a-complex-json-object-via-javascript) – Bergi Jun 27 '13 at 21:51

3 Answers3

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/

GameAlchemist
  • 18,995
  • 7
  • 36
  • 59
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

Matthew Graves
  • 3,226
  • 1
  • 17
  • 20
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];
    }
…
Bergi
  • 630,263
  • 148
  • 957
  • 1,375