2016-05-23 6 views
0

次のシナリオでちょっとしたことがあります。 私は3つの配列を持ち、配列を使って新しいオブジェクトを作成したいと思っています。3つの配列からオブジェクトを作成

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/

関連する問題