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

Posted

技术标签:

【中文标题】将对象数组添加到单个数组中【英文标题】:Adding array of objects into single array 【发布时间】:2019-01-25 03:45:51 【问题描述】:

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

例如:我没有得到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

【问题讨论】:

【参考方案1】:

您将相同的对象引用推送到数组。通过使用新的对象,所有的对象都是不同的。

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

【讨论】:

【参考方案2】:

您的代码几乎是正确的,它需要更正,正如@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】:

您还可以将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);

【讨论】:

【参考方案4】:

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

抱歉,如果有语法错误,因为我是通过手机回答的:)

【讨论】:

以上是关于将对象数组添加到单个数组中的主要内容,如果未能解决你的问题,请参考以下文章

如何将对象列表或数组传递到旨在更新单个对象的 GraphQL 突变中?

WPF将单个文本框绑定到集合对象或数组中的元素

RestKit:将单个对象映射到现有数组

如何将对象的动态数组保存在单个数组中

在单个 JSON Patch 操作中向数组添加多个值?

如何将对象添加到数组