2016-12-21 20 views
0

オブジェクトを配列に追加しようとしていますが、各配列にはemailやnameのような複数のフィールドがあります。次に、アレイの外観を示します。別の配列に追加したいです。JavaScriptでの繰り返し処理

result = [ 
    { 
    "email": "[email protected]", 
    "firstName": "abc" 
    }, 
    { 
    "email": "[email protected]", 
    "firstName": "def" 
    } 
] 

以下は、私が適用しようとしているロジックです。

var userEmail = "" 
var users = []; 
var newUser = {'email' : "", 'name' : "", 'type' : 'to'}; 

for(var i=0; i<result.length; i++){ 
    userEmail = result[i].email 
    //console.log(userEmail); 
    newUser.email = result[i].email; 
    newUser.name = result[i].firstName; 
    users.push(newUser); 
    } 

私の予想出力はこの

users = [ { email: '[email protected]', name: 'abc' }, 
    { email: '[email protected]', name: 'def' } ] 

である。しかし、私は取得しています出力は、私が間違っているつもりです。この

[ { email: '[email protected]', name: 'abc' }, 
    { email: '[email protected]', name: 'abc' } ] 

のですか?

答えて

5

あなたは繰り返しの代わりに、各反復で新しいオブジェクトを作成する、新しい値で単一オブジェクトを更新しています。ループの中にvar newUser = {};を作成してください。

var users = result.map(function(r) { 
    return { email: r.email, name: r.firstName, type: 'to' }; 
}); 

またはES6の構文で:

let users = result.map(r => ({ email: r.email, name: r.firstName, type: 'to' })); 
+0

を、私はそれで各反復 – puneeth8994

+1

で新しいオブジェクトを作成するにはどうすればよいです!私は、これ以上の記述が必要かもしれないと思います。 – Vikrant

+0

または[destructuring](http://www.2ality.com/2015/01/es6-destructuring.html)を使用して: 'result.map(({email、firstName})=>({email、name:firstName })) '。あるフォームから別のフォームにデータを変換する際に、エラーの発生を避けるために、高次関数( 'map'、' filter'、 'reduce'など)を使うのが一般的です。 – dotcs

1

あなたがに実行していた、別の配列に配列を核変換するための標準的な機能である.mapを使用する方が良いだろう、と述べた

あなたのnewUsersオブジェクトの問題これはオブジェクトなので、このオブジェクトへの参照をusers配列に追加するだけです。 2回目の反復でaginを変更しているときは、元の参照にも変更があります。以下のスニペットで問題を解決してください。

var userEmail = "" 
 
var users = []; 
 
          
 
for(var i=0; i<result.length; i++){ 
 
    users.push({ 
 
    email: result[i].email, 
 
    name: result[i].firstName, 
 
    type: 'to' 
 
    }); 
 
    }

-1

これを試してみてください:

var result = [ 
    { 
    "email": "[email protected]", 
    "firstName": "abc" 
    }, 
    { 
    "email": "[email protected]", 
    "firstName": "def" 
    } 
]; 

users = []; 

result.forEach(function(obj){ 
    var newUser = {}; 
    newUser.email = obj.email; 
    newUser.name = obj.firstName 
    users.push(newUser) 
}) 

console.log(users) 
+0

このapprochには何が間違っていますか?誰でもこれを説明できますか? – Sahadev

+0

あなたが '.map'を使用したときに' .forEach/push'を使用しました。 – Alnitak

関連する問題