2012-03-03 36 views
23

Tôi hiện đang có đoạn mã sau:Thêm đối tượng mới để mảng

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; 

Vấn đề là khi tôi thay đổi giá trị của id và giá trị khi tôi thêm yếu tố thứ hai các giá trị cũng thay đổi trong các yếu tố đầu tiên. Có cách nào mà tôi có thể tiếp tục thêm các phần tử mới mà không thay đổi giá trị của các giá trị được chèn trước đó trong mảng không?

Trả lời

72

Hãy thử điều này thay vì:

var myArray = []; 

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

hoặc sẽ này không làm việc cho tình hình của bạn?

+1

Cú pháp của bạn bị sai lệch. Bạn không sử dụng '=' bên trong một đối tượng theo nghĩa đen như vậy, bạn sử dụng ':'. Mặc dù tôi đồng ý với cách tiếp cận này. –

+1

Rất tiếc, bắt tốt. Đã sửa. Cảm ơn! – kendaleiv

+0

@kendaleiv Hoàn hảo nó hoạt động chính xác cho tình huống của tôi, Cảm ơn! – user1219627

0

Nếu bạn đang sử dụng jQuery, bạn có thể sử dụng extend

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

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

Đó là bởi vì các giá trị đối tượng được truyền bằng tham chiếu. Bạn có thể sao chép các đối tượng như thế này:

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]); 

Kết quả:

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

Đối tượng được thông qua tham khảo .. Để tạo một đối tượng mới, tôi làm theo phương pháp này ..

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

Đây là trường hợp sách giáo khoa cho một 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

Tôi đã thực hiện câu trả lời khác nhưng tôi đồng ý rằng đây cũng là một giải pháp tốt. Cảm ơn – user1219627

0

Bạn sẽ có cùng một đối tượng hai lần trong mảng của mình, bởi vì giá trị đối tượng được chuyển qua tham chiếu. Bạn phải tạo một đối tượng mới như

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

hoặc

myArray.push này ({id: 24, giá trị: 246});

Các vấn đề liên quan