我正在尝试将对象存储到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。请帮助我。
答案 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);