将新的对象添加到数组
我目前有以下代码:
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});