从三个数组

时间:2016-05-23 16:52:34

标签: javascript arrays object

有点卡在以下场景中。 我有三个数组,使用数组想创建一个新对象。

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"
 }
}

提前致谢。

5 个答案:

答案 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)

我想添加这个解决方案,它将它封装在一个方法中,如下所示:

/services/New Host/cat

https://jsfiddle.net/x54b0rhk/