将对象数组添加到单个数组中

时间:2018-08-18 08:04:04

标签: javascript html arrays angularjs object

我正在尝试将对象数组从现有对象推送到新数组。但是只有最后一个值被推送

例如:我得到的不是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);
}

Fiddle link

4 个答案:

答案 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是您所需要的。这是它提供的好处:

  1. 它隐式循环遍历数组。因此,您无需编写自己的for循环。
  2. 它隐式返回一个新对象。因此,您无需在循环中声明和使用新对象。
  3. 它为您要完成的任务提供了更实用的方法。

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);

相关问题