将对象数组添加到单个数组中
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);
抱歉,如果有语法错误,因为我是通过手机回答的:)
【讨论】:
以上是关于将对象数组添加到单个数组中的主要内容,如果未能解决你的问题,请参考以下文章