2017-05-08 7 views
0

私はJSで少し問題に取り組んでいます。Javascriptでオブジェクトを指定する配列

目的は、多次元配列をオブジェクトの配列に変換する関数を書くことです。例えば、入力は次のようになります。

var data = [ 
    [ 
    ['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk'] 
], 
[ 
    ['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager'] 
    ] 
] 

そして、これは出力のようになります。ここでは

[ 
{firstName: 'Joe', lastName: 'Blow', age: 42, role: 'clerk'}, 
{firstName: 'Mary', lastName: 'Jenkins', age: 36, role: 'manager'} 
] 

は、私がこれまで持っているものです。

function transformEmployeeData(array) { 
    var object = {}; 
    var objectsArray = []; 
    for (i=0; i<array.length; i++) { 
    for (j=0; j<array[i].length; j++) { 
     var keys = array[i][j][0]; 
     object[keys] = array[i][j][1]; 
    } objectsArray.push(object); 
    } 
     return objectsArray); 
} 

それはほとんどそうですが、私これを出力として取得します。

[ { firstName: 'Mary', 
lastName: 'Jenkins', 
age: 36, 
role: 'manager' }, 
{ firstName: 'Mary', 
lastName: 'Jenkins', 
age: 36, 
role: 'manager' } ] 

同じことを2回吐き出さないように関数を修正するにはどうすればいいですか?

ありがとうございました!

+0

あなたがデバッガで、またはペンと紙を使用してコードを通過しようとしたことがありますか?そうすれば、バグがどこにあるかを理解して修正することができます。 – Li357

+1

[** this **](https://jsfiddle.net/vf0dp1rL/)のように 'map'と' reduce'を使って実行できます。 –

+0

@ ibrahimmahrir - それはOPを助けません。 – RobG

答えて

2

コードは、オブジェクトのインスタンスを1つ作成し、そのインスタンスの値を上書きします。新しいオブジェクトを毎回作成し、修正するには

function transformEmployeeData(array) { 
    var objectsArray = []; 
    for (i=0; i<array.length; i++) { 
     var object = {}; 
     for (j=0; j<array[i].length; j++) { 
      var keys = array[i][j][0]; 
      object[keys] = array[i][j][1]; 
     }  
     objectsArray.push(object); 
    } 
    return objectsArray); 
} 
+0

ありがとう!私はそれが問題だと思ったが、それについて何をすべきか分からなかった。ニースの修正! – user211309

+0

お寄せいただきありがとうございます。承認されたとしてマークしてください:) – khan

1

オブジェクト変数のインスタンスを1つしか作成していません。 ループ内に新しいインスタンス(オブジェクト= {})を作成します。

実際には同じオブジェクトを使用して、実行されるオブジェクトのプロパティをすべて削除します。

関連する問題