在Array of object中插入一个新对象

问题描述 投票:0回答:2

我有一个数组列表。

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"}] 

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

javascript arrays arraylist
2个回答
0
投票

只需使用push功能

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

0
投票

要在数组中推送值,您必须使用array.pusharray.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)

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


那你该怎么做呢?

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)

References:

© www.soinside.com 2019 - 2024. All rights reserved.