Create object from three arrays

久未见 提交于 2020-01-06 15:59:10

问题


A little bit stuck on the following scenario. I have three arrays, and using the arrays would like to create a new object.

var fields = ['firstName', 'lastName', 'email'],
oldVals = ['John', 'Doe', 'doe@mail.com'],
newVals = ['Jo','Do','jo@mail.com'];

The new object should be as :

{
 "firstName": {
    "oldValue": "John",
    "newValue": "Jo"
 },
 "lastName": {
    "oldValue": "John",
    "newValue": "Do"
 },
 "email": {
    "oldValue": "doe@mail.com",
    "newValue": "jo@mail.com"
 }
}

Thanks in advance.


回答1:


// first check that your arrays are actually all the same length. Then...

var obj = {};
for(var i=0;i<fields.length;i++) {
    obj[fields[i]] = {
        oldValue: oldVals[i],
        newValue: newVals[i]
    }
}



回答2:


Assuming lengths are same, Using reduce function of array

fields.reduce(function(res,x,index){
  res[x] = { 
   oldValue:oldVals[index],
   newValue:newVals[index]
   }
  return res;
},{});



回答3:


A proposal with Array#forEach and some arrays for dynamic generation of the object.

var fields = ['firstName', 'lastName', 'email'],
    oldVals = ['John', 'Doe', 'doe@mail.com'],
    newVals = ['Jo', 'Do', 'jo@mail.com'],
    object = function (array, keys1, keys2) {
        var r = {};
        keys1.forEach(function (k1, i) {
            r[k1] = r[k1] || {};
            keys2.forEach(function (k2, j) {
                r[k1][k2] = array[j][i];
            });
        });
        return r;
    }([oldVals, newVals], fields, ['oldVals', 'newVals']);

document.write('<pre>' + JSON.stringify(object, 0, 4) + '</pre>');



回答4:


A property can be created dynamically thus:

objectName[propertyVariable] = valueVariable;

So in the present case something like this would do the trick.

var object1 = {};
object1[fields[0]] = { oldValue: oldVals[0], newValue: newVals[0] } 



回答5:


I wanted to add this solution , which will encapsulate it in a method, like this :

var fields = ['firstName', 'lastName', 'email'],
oldVals = ['John', 'Doe', 'doe@mail.com'],
newVals = ['Jo','Do','jo@mail.com'];


function createCustomObj(fields , oldVals, newVals){
var obj={};

    fields.forEach( function(f, i){
        obj[f]={};
    obj[f]['oldValue']= oldVals[i];
    obj[f]['newValue']= newVals[i];
});

return obj;

};

console.log(createCustomObj(fields, oldVals, newVals));

https://jsfiddle.net/x54b0rhk/



来源:https://stackoverflow.com/questions/37396493/create-object-from-three-arrays

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!