在对象数组

时间:2018-01-03 05:37:12

标签: javascript arrays arraylist

我有一个数组列表。

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

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

2 个答案:

答案 0 :(得分:0)

只需使用push功能

即可

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

答案 1 :(得分: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)




参考文献: