Looping to create object Keys and Values in Javasc

2020-03-26 08:54发布

问题:

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.

回答1:

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/



回答2:

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



回答3:

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];
    }
…