繁体   English   中英

在对象数组中插入一个新对象

[英]Insert a new object in Array of object

我有一个数组列表。

dataList = []

我想在数组中插入对象,所以我尝试了这个,

dataList.concat([{"name":"BOB", "value":"1"}])
// [{"name":"BOB", "value":"1"}]  

但是当我在同一数组中插入第二个对象时。

dataList.concat([{"name":"Joe", "value":"2"}])
// [{"name":"Joe", "value":"2"},{"name":"Joe", "value":"2"}] 

插入第二个数组后,它也会替换第一个对象。 我在哪里错?,请帮忙。

只需使用push功能

 var dataList = []; dataList.push({ "name": "BOB", "value": "1" }); //Pushing second object dataList.push({ "name": "Joe", "value": "2" }) console.log(dataList) 

要将值推入数组中,必须使用array.push array.concat不添加新项目。 它合并2数组并返回第三个数组。 所以你的代码:

dataList.concat([{"name":"BOB", "value":"1"}])

什么都不做。

 var dataList = [] dataList.concat([{"name":"BOB", "value":"1"}]) console.log(dataList) 

根据行为,您的代码应如下所示:

 var dataList = [] var obj = [{"name":"BOB", "value":"1"}]; dataList = dataList.concat(obj) obj[0].value = 2; dataList = dataList.concat(obj) console.log(dataList) 

两个对象都受到影响的原因是,使用引用复制/分配了对象。 因此,变量将保存一个内存位置,对该变量的任何更改都将反映到该位置。 因此,如果拥有此引用的变量多于1个,它也会被更新。


那么,您应该如何实现呢?

 var dataList = [] var obj = {"name":"BOB", "value":"1"}; dataList = dataList.concat(obj) var obj2 = Object.assign({}, obj) obj2.value = 2; dataList = dataList.concat(obj2) console.log(dataList) 

但是仍然使用Array.concat是错误的。 它不打算像这样使用。

 var dataList = [] var obj = {"name":"BOB", "value":"1"}; dataList.push(obj) var obj2 = Object.assign({}, obj) obj2.value = 2; dataList.push(obj2) console.log(dataList) 

参考文献:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM