在javascript中迭代

pun*_*994 0 javascript

我试图在数组中添加对象,每个数组都有多个字段,如电子邮件和名称.以下是数组的外观.我想将它添加到另一个数组.

result = [
  {
    "email": "abc@gmail.com",
    "firstName": "abc"
  },
  {
    "email": "def@gmail.com",
    "firstName": "def"
  }
]
Run Code Online (Sandbox Code Playgroud)

以下是我试图应用的逻辑.

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);
  }
Run Code Online (Sandbox Code Playgroud)

我的预期产量是这个

users = [ { email: 'abc@gmail.com', name: 'abc' },
  { email: 'def@gmail.com', name: 'def' } ]
Run Code Online (Sandbox Code Playgroud)

但我得到的输出就是这个

[ { email: 'abc@gmail.com', name: 'abc' },
  { email: 'abc@gmail.com', name: 'abc' } ]
Run Code Online (Sandbox Code Playgroud)

我哪里错了?

Aln*_*tak 5

您将使用新值重复更新单个对象,而不是在每次迭代中创建对象.你应该已经创建了var newUser = {}; 内部循环.

也就是说,最好使用.map哪个标准函数将数组转换为另一个数组:

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

或者在ES6语法中:

let users = result.map(r => ({ email: r.email, name: r.firstName, type: 'to' }));
Run Code Online (Sandbox Code Playgroud)