如何创建单个对象的数组Javascript

时间:2019-09-30 17:52:55

标签: javascript arrays object arr

它们都指向同一个对象“ bestGamer”,我不希望它们这样做,我希望数组中的每个单元格都是一个单独的对象,其道具中的值不同。

我想做静态操作,因为稍后我想传递一个数组,我不希望在运行时输入不同的值

const bestGamer = {
        "name" : "",
        "points" : 0    
}
arr2 = new Array(2).fill(bestGamer)
console.log("First:",arr2[0])
console.log("Second:",arr2[1]);    
arr2[0].name ="Yossi"
arr2[0].points++
arr2[1].name ="Dima"
arr2[1].points++
console.log("First:",arr2[0]);
console.log("Second:",arr2[1]);
console.log("Orignal Object",bestGamer);

enter image description here

3 个答案:

答案 0 :(得分:4)

您需要在将副本放入newArray时创建一个副本,fill(bestGamer)在所有索引上放置相同的bestGamer,以便最终在所有索引上具有相同的引用

let bestGamer = { a: 1,  b: 2 }
let newArr = new Array(2).fill(0).map(v=> ({...bestGamer}))

newArr[0].a = 10
console.log(newArr)


您可以使用Array.from

代替新的Array。

let bestGamer = { a: 1,  b: 2 }
let newArr = Array.from({length:2}, () => ({...bestGamer}) )

newArr[0].a = 10
console.log(newArr)

答案 1 :(得分:0)

您正在用bestGamer填充数组,因此将使用对该对象的引用填充它。您需要为每个元素创建一个新对象。一种简单的方法是将Array.mapObject.assign组合在一起:

arr2 = new Array(2).fill(0).map(() => Object.assign({}, bestGamer));

答案 2 :(得分:0)

要创建具有单个对象的数组,可以执行此操作。

第1步:声明一个数组

var myArray = [];

第2步:向其中添加一个对象

myArray.push[{0, 1, 2, 3}]

现在您的数组有1个项目。该项目是项目[0]。 Item [0]是一个对象。它内部有多个值,在本例中为4。因此,要访问item [0]内部的第二个项目,您可以使item [0] [1]。