2015-06-01 34 views
5

Tôi chỉ tò mò về điều này.Chỉ định một đối tượng javascript và đối tượng bên trong một mảng

Hãy nói rằng tôi có một mảng của các đối tượng và tôi có thể tạo 1 đối tượng, cho phép đặt tên cho mảng các đối tượng mục và đối tượng mục.

Tôi muốn có được một mục cụ thể trong mảng của tôi về mục bằng cách sử dụng đoạn mã sau:

//gets an item base on ID 
function get_item(td){ 
    var item = undefined; 
    $.each(items, function(i, val) { 
     if(val.item_id == td){ 
      item = val; 
     } 
    }); 
    return item; 
} 

Các get_item() về cơ bản được một đối tượng phù hợp với id cung cấp.

Câu hỏi của tôi là vậy. Nếu tôi thay đổi các thuộc tính của mục thì nó cũng sẽ thay đổi các thuộc tính của một đối tượng liên kết với nó trong mảng đó?

Cảm ơn bạn rất nhiều!

+0

Bạn có thể đăng mẫu đối tượng mảng? –

+3

hiển thị thêm mã. Ngay sau khi bạn "nói rằng tôi có ...", hiển thị mã mà bạn nghĩ tương ứng với tình huống đó. –

+0

ok tôi sẽ sửa câu hỏi của tôi. – iamjc015

Trả lời

6

Nếu tôi thay đổi thuộc tính của mục thì nó cũng sẽ thay đổi các thuộc tính của đối tượng được liên kết với nó trong mảng đó?

Có.

Đối tượng không được sao chép. Thay vào đó, các tham chiếu đến các đối tượng được truyền xung quanh. Ví dụ đơn giản nhất:

var a = []; 
var b = a; 
b.push(1); 
console.log(a); // logs [1] 

Nhiều ngôn ngữ lập trình hướng đối tượng hoạt động như thế này.

1

Bạn có thể cập nhật cho bạn chức năng để:

var data= array(); 
function get_item(propertyValue, propertyName){ 
    var retval; 
    for(var i = 0; i < data.length; i++){ 
     if(data[i][propertyName]==propertyValue){ 
      retval = data[i]; 
      break; 
     } 
    } 
    return retval; 
} 

Sử dụng nó

var item1 = get_item(1,"id"); 
var item2 = get_item("john","name"); 
+0

bạn có thể vui lòng giải thích thêm? – iamjc015

+0

Làm cách nào để trả lời câu hỏi của OP? * "Nếu tôi thay đổi các thuộc tính của mục thì nó cũng sẽ thay đổi các thuộc tính của một đối tượng liên kết với nó trong mảng?" * –

+0

điều này là tốt, tôi có thể thêm tên thuộc tính động. Cảm ơn. – iamjc015

2

Giá trị của đối tượng bên trong mảng cũng sẽ thay đổi vì đó là một tài liệu tham khảo. Nếu bạn muốn biết thêm thông tin, tôi khuyên bạn nên đọc Objects and Prototypes.

Nếu bạn không muốn thay đổi thì bạn nên sử dụng chức năng như chức năng _.clone() của lodash.

Ngoài ra bạn có thể sử dụng bộ lọc để có được những đối tượng:

function get_item(td){ 
    return items.filter(function(item) { 
     return item.id === td; 
    })[0]; 
} 
+0

Điều này hữu ích. Cảm ơn. – iamjc015

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