2010-09-24 35 views
12

thể trùng lặp:
Object comparison in JavaScriptSo sánh đối tượng javascript mẹ đẻ với jQuery

Tôi có hai quê hương đối tượng JavaScript:

var foo = { hello: 'world', holy: { shit: 'batman' } }; 
var bar = { ... }; 

Tôi muốn so sánh hai (foo == thanh).

+3

+1 cho tên thuộc tính –

+0

Thật vậy! Sửa nó lên. –

+0

Có một cuộc thảo luận về điều này ở đây: [http://stackoverflow.com/questions/1068834/object-comparison-in-javascript](http://stackoverflow.com/questions/1068834/object-comparison-in-javascript) – fehays

Trả lời

1

jQuery không có tiện ích tích hợp để so sánh các đối tượng. Nó không thực sự rõ ràng từ bài viết của bạn những thông tin bạn muốn lấy được từ hai đối tượng của bạn. Bạn đang cố gắng sắp xếp chúng?

Tùy thuộc vào những gì bạn đang cố gắng làm, bạn có thể đáp ứng trường hợp sử dụng của bạn bằng cách sử dụng một trong các phương pháp tiện ích của jQuery. Xem, ví dụ: jQuery.extend, jQuery.each, jQuery.mapjQuery.merge. jQuery chủ yếu quan tâm đến việc điều khiển các phần tử DOM; nó không có tính năng tích hợp để sắp xếp danh sách (mặc dù bạn có thể tìm thấy một plugin).

Kiểm tra các tài liệu tiện ích jQuery:

http://api.jquery.com/category/utilities/

Ngoài ra, hãy kiểm tra array.sort(), mà dường như được xây dựng vào javascript:

http://www.javascriptkit.com/javatutors/arraysort.shtml

6

này hoạt động tốt, nhưng chỉ trong một số trường hợp:

var obj1 = {n1: "v1", n2: "v2"}, 
    obj2 = {n1: "v1", n2: "v2"}, 
    obj3 = {n2: "v2", n1: "v1"}, 
    obj4 = {n2: "v2", n1: "v1", f: function(){}}; 


// this will work correctly: 
JSON.stringify(obj1) == JSON.stringify(obj2); //true 


// but this fails :(
JSON.stringify(obj2) == JSON.stringify(obj3); //false 


// and this :(
JSON.stringify(obj3) == JSON.stringify(obj4); //true 
+4

So sánh các đối tượng với 'JSON.stringify' sẽ * chỉ đôi khi * hoạt động vì thứ tự của các khóa không được xác định rõ. Các thuộc tính vừa xảy ra được lặp lại theo cùng thứ tự trong ví dụ này - và trong quá trình thực hiện cụ thể được kiểm tra - nhưng * hành vi này là không xác định và không nên được sử dụng *. –

+0

Tôi nghĩ rằng phương pháp này có thể được sửa đổi (ví dụ: sắp xếp từng đối tượng bằng các phím theo thứ tự sắp xếp) để giải quyết vấn đề được mô tả bởi pst, phải không? – iX3

+1

Theo dõi @ user166390. Phương thức này chỉ hoạt động nếu đối tượng không chứa hàm, các nút DOM và thứ tự của các trường vẫn giữ nguyên. Nó hoạt động khi so sánh JSON từ một số API. Nhưng, nếu bạn so sánh các đối tượng được tạo bởi chính bạn, TẠI SAO KHÔNG SỬ DỤNG ID UNIQUE? – Dan