2012-03-03 89 views
23

我現在有以下代碼:新的對象添加到陣列

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和值的值時,我添加第二個元素的值也與第一元件而改變。有沒有一種方法可以在不改變數組中以前插入值的值的情況下繼續添加新元素?

回答

72

試試這個:

var myArray = []; 

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

或將本不適合自己情況的工作?

+1

你的語法搞砸了。你不要在這樣的對象文字中使用'=',你可以使用':'。雖然我同意這種方法。 – 2012-03-03 05:44:27

+1

哎呀,很好。固定。謝謝! – kendaleiv 2012-03-03 05:46:13

+0

@kendaleiv完美的工作完全符合我的情況,謝謝! – user1219627 2012-03-03 05:53:50

0

如果你使用jQuery,您可以使用extend

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

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

這是因爲對象值是通過引用傳遞。您可以複製這樣的對象:

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 
0

對象是通過引用傳遞。要創建一個新對象,我按照這個方法..

//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; 
16

這是一本constructor function的教科書:

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)) 
+0

我已經實施了其他答案,但我確實認爲這也是一個很好的解決方案。謝謝 – user1219627 2012-03-03 06:13:20

0

您的數組中會有兩次相同的對象,因爲對象值是通過引用傳遞的。你必須創建這樣

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,值:246});