2016-05-23 85 views
0

有点卡在以下情况。 我有三个数组,并使用数组想要创建一个新的对象。从三个阵列创建对象

var fields = ['firstName', 'lastName', 'email'], 
oldVals = ['John', 'Doe', '[email protected]'], 
newVals = ['Jo','Do','[email protected]']; 

新的对象应该是为:提前

{ 
"firstName": { 
    "oldValue": "John", 
    "newValue": "Jo" 
}, 
"lastName": { 
    "oldValue": "John", 
    "newValue": "Do" 
}, 
"email": { 
    "oldValue": "[email protected]", 
    "newValue": "[email protected]" 
} 
} 

感谢。

+0

你问一个函数会将这些数组转换成一个对象? – juil

+0

这是什么部分你坚持?你到底做了什么来解决这个问题? –

+4

Doe发生了什么事? –

回答

6
// 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] 
    } 
} 
+0

非常感谢你的解决方案工作正常。 – mattts

0

的属性可以动态创建这样的:

objectName[propertyVariable] = valueVariable; 

因此,在目前的情况下是这样的会做的伎俩。

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

假设长度是一样的,使用的array

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

这太棒了! – Jaumzera

1

reduce函数Array#forEach的提案和某些阵列为动态生成的对象。

var fields = ['firstName', 'lastName', 'email'], 
 
    oldVals = ['John', 'Doe', '[email protected]'], 
 
    newVals = ['Jo', 'Do', '[email protected]'], 
 
    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>');

0

我想添加这个解决方案,将其封装在一个方法,像这样:

var fields = ['firstName', 'lastName', 'email'], 
oldVals = ['John', 'Doe', '[email protected]'], 
newVals = ['Jo','Do','[email protected]']; 


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/