我正在尝试将对象数组从现有对象推送到新数组。但是只有最后一个值被推送
例如:我得到的不是1 2 3
,而是3 3 3
var arr=[{'id':'1','name':'xyz'},{'id':'2','name':'pqr'},{'id':'3','name':'mon'}];
var toSend=[];
var obj={'id':""};
for(var i=0;i<arr.length;i++) {
obj.id = arr[i].id;
toSend.push(obj);
}
答案 0 :(得分:2)
将相同的对象引用推入数组。通过使用新对象,所有对象都是不同的。
var arr = [{ id: '1', name: 'xyz' }, { id: '2', name: 'pqr' }, { id:'3', name: 'mon' }],
toSend = [],
obj;
for (var i = 0; i < arr.length; i++) {
obj = { id: arr[i].id };
toSend.push(obj);
}
console.log(toSend);
答案 1 :(得分:1)
var变量obj需要在for循环内声明
也停止使用var并开始使用let。 ES的建议是使用let而不是var。因为var具有窗口作用域,而let具有块级作用域
for(let i=0;i<arr.length;i++) {
let obj= {};
obj.id = arr[i].id;
toSend.push(obj);
}
或者您也可以使用地图
arr.map((data, i) => {
let obj= {};
obj.id = data.id;
toSend.push(obj);
}
对不起,如果因为我正在从移动电话接听而引起语法错误,那么
答案 2 :(得分:1)
您的代码几乎是正确的,它需要更正,就像@Nina在答案中已经提到的那样。
但是,如果您想要更好的方法来执行此操作,则Array#map
是您所需要的。这是它提供的好处:
for
循环。
var arr = [{
'id': '1',
'name': 'xyz'
}, {
'id': '2',
'name': 'pqr'
}, {
'id': '3',
'name': 'mon'
}];
var toSend = arr.map(item => item.id);
console.log(toSend);
答案 3 :(得分:1)
您还可以将Array.map()
用于数组解构:
var arr=[{'id':'1','name':'xyz'},{'id':'2','name':'pqr'},{'id':'3','name':'mon'}];
var toSend = arr.map(({id}) => ({id}));
console.log(toSend);