无法将对象存储到JavaScript中的数组中

时间:2019-06-03 10:30:01

标签: javascript arrays object

我正在尝试将对象存储到Javascript数组中。

var res=[
    {name:'Alex',place:'US',age:20},
    {name:'Jason',place:'Canada',age:25}
  ];

var obj={};
var data=[];

for ( let i in res){
    obj.name=res[i].name;
    obj.place=res[i].place;
    data.push(obj);
 }

console.log(data);

我的预期输出:

[ 
  {name:'Alex',place:'US'}.
  {name:'Jason',place:'Canada'} 
]

我得到的实际输出:

[ 
  {name:'Jason',place:'Canada'},
  {name:'Jason',place:'Canada' }
]

为什么我得到这种类型的输出? 我是noobie。请帮助我。

3 个答案:

答案 0 :(得分:2)

您的var obj={};在内存中只有一个对象-该行运行一次,并在内存中创建一个对象,然后继续进行突变在for循环中的每次迭代中,将其推入数组。最后,该数组包含对同一对象的2个引用。

在循环内创建对象:

for ( let i in res){
    var obj = {};
    obj.name=res[i].name;
    obj.place=res[i].place;
    data.push(obj);
}

您还可以考虑改用.map

const res=[
  {name:'Alex',place:'US',age:20},
  {name:'Jason',place:'Canada',age:25}
];
const data = res.map(({ name, place }) => ({ name, place }));
console.log(data);

答案 1 :(得分:1)

您基本上是在循环中一次又一次更新同一对象。每个循环需要有不同的对象。因此,您需要将var obj={}移至for循环内。

var res=[{name:'Alex',place:'US',age:20},{name:'Jason',place:'Canada',age:25}];


var data=[];

for ( let i in res){
    var obj={};
    obj.name=res[i].name;
    obj.place=res[i].place;
    data.push(obj);
}

console.log(data);

答案 2 :(得分:0)

使用.map会容易得多

var res=[
    {name:'Alex',place:'US',age:20},
    {name:'Jason',place:'Canada',age:25}
  ];

var obj={};
var data = res.map(({ name, place }) => {
  return ({ name, place })
});
console.log(data);