有点卡在以下场景中。 我有三个数组,使用数组想创建一个新对象。
var fields = ['firstName', 'lastName', 'email'],
oldVals = ['John', 'Doe', 'doe@mail.com'],
newVals = ['Jo','Do','jo@mail.com'];
新对象应为:
{
"firstName": {
"oldValue": "John",
"newValue": "Jo"
},
"lastName": {
"oldValue": "John",
"newValue": "Do"
},
"email": {
"oldValue": "doe@mail.com",
"newValue": "jo@mail.com"
}
}
提前致谢。
答案 0 :(得分: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]
}
}
答案 1 :(得分:3)
假设长度相同,请使用reduce
array
函数
fields.reduce(function(res,x,index){
res[x] = {
oldValue:oldVals[index],
newValue:newVals[index]
}
return res;
},{});
答案 2 :(得分:1)
包含Array#forEach
的提案和一些用于动态生成对象的数组。
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>');
答案 3 :(得分:0)
可以动态创建属性:
objectName[propertyVariable] = valueVariable;
所以在目前的情况下,这样的事情就可以解决问题。
var object1 = {};
object1[fields[0]] = { oldValue: oldVals[0], newValue: newVals[0] }
答案 4 :(得分:0)