2012-05-21 78 views
8

Tôi muốn thay thế toàn bộ đối tượng trong một mảng.Thay thế một phần tử trong một mảng đối tượng

http://jsfiddle.net/CWSbJ/

var array = [ {name: "name1" }, { name: "name2" } ]; 
var element = array[0]; 
element = {name: "name3"}; 
alert(array[0].name); 

Trong đoạn mã này tôi mong chờ các name3 đầu ra, tại sao tôi không thể thay thế toàn bộ một đối tượng trong một mảng như thế này? Và cách tốt để làm điều này là gì?

+1

Bạn chỉ gán một giá trị khác cho 'element', không cho' array [0] ' . –

Trả lời

16

Cách đúng là

array[0] = {name: "name3"}; 

mã hiện tại của bạn không làm việc như mong đợi bởi vì bạn đang tham gia một referenc * tới phần tử đầu tiên với

var element = array[0]; 

và sau đó bạn có thay thế các giá trị của biến cục bộ này với một đối tượng khác. Điều này rời khỏi mảng ban đầu chưa được sửa đổi.

+0

Giải thích không đúng. 'element' không phải là một bản sao, mà là một tham chiếu * cho đối tượng được lưu trữ trong' mảng [0] '. Thay đổi 'element.name' sẽ ảnh hưởng đến' mảng [0] .name'. – Deestan

+0

@Deestan: Cảm ơn, đã khắc phục. Không thực sự biết những gì tôi đã suy nghĩ. – Jon

+0

Tôi nghĩ bạn nên thử mảng [i] .name = "bạn định giá để gán", nếu bạn theo mảng [i] = {name: 'something'}, mọi thuộc tính đối tượng được gán chỉ với tên tất cả sẽ là null trong đó trường hợp. – Sudarshan

2

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

var array = [ {name: "name1" }, { name: "name2" } ]; 
array[0] = {name: "name3"}; 
alert(array[0].name); 

element không phải là mảng thực tế - một bản sao của mảng

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