将新的对象添加到数组

我目前有以下代码:

var myArray = []; var myElement = { id: 0, value: 0 } myElement.id =0; myElement.value=1; myArray[0] = myElement; myElement.id =2; myElement.value=3; myArray[1] = myElement; 

问题是,当我添加第二个元素时,我更改了id和value的值,这些值也在第一个元素中更改。 有没有一种方法,我可以继续添加新的元素,而不改变数组中以前插入的值的值?

试试这个:

 var myArray = []; myArray.push({ id: 0, value: 1 }); myArray.push({ id: 2, value: 3 }); 

或者这不适合你的情况?

这是一个构造函数的教科书案例:

 var myArray = []; function myElement(id, value){ this.id = id this.value = value } myArray[0] = new myElement(0,1) myArray[1] = new myElement(2,3) // or myArray.push(new myElement(1, 1)) 

您需要不断创build新的对象,或克隆现有的对象。 看看在JavaScript中深入克隆一个对象的最有效方法是什么? 如何克隆。

这是因为对象值是通过引用传递的。 你可以像这样克隆对象:

 var myArray = []; var myElement = { id: 0, value: 0 } myElement.id =0; myElement.value=1; myArray[0] = myElement; var obj = {}; obj = clone(myElement); obj.id = 2; obj.value = 3; myArray[1] = obj; function clone(obj){ if(obj == null || typeof(obj) != 'object') return obj; var temp = new obj.constructor(); for(var key in obj) temp[key] = clone(obj[key]); return temp; } console.log(myArray[0]); console.log(myArray[1]); 

结果:

  - id: 0 - value: 1 - id: 2 - value: 3 

如果你使用jQuery,你可以使用扩展

 myElement.id =0; myElement.value=1; myArray[0] = $.extend({}, myElement); myElement.id = 2; myElement.value = 3; myArray[1] = $.extend({}, myElement); 

对象通过引用传递。要创build一个新的对象,我遵循这个方法..

 //Template code for object creation. function myElement(id, value) { this.id = id; this.value = value; } var myArray = []; //instantiate myEle var myEle = new myElement(0, 0); //store myEle myArray[0] = myEle; //Now create a new object & store it myEle = new myElement(0, 1); myArray[1] = myEle; 

你将在你的数组中有两个相同的对象,因为对象值是通过引用传递的。 你必须像这样创build一个新的对象

 myElement.id = 244; myElement.value = 3556; myArray[0] = $.extend({}, myElement); //for shallow copy or myArray[0] = $.extend(true, {}, myElement); // for deep copy 

要么

myArray.push({id:24,value:246});