2012-07-15 34 views
9

Khi tôi sắp xếp lại một vùng chọn trong d3 với selection.sort(), tham gia dữ liệu bị xáo trộn và đường dẫn của tôi được gán lại cho các đối tượng dữ liệu sai.Sắp xếp một lựa chọn trong d3.js làm nhiễu dữ liệu tham gia

Tôi chỉ muốn sắp xếp lại các đường dẫn sao cho một số kết thúc trên đầu trang của những người khác (như trong chỉ mục z). Tôi không muốn gán lại các đối tượng dữ liệu từ đường này đến đường dẫn khác.

Tôi làm cách nào để sắp xếp lại đường dẫn mà không làm phiền việc kết nối dữ liệu?

_friends.selectAll('path').sort(function(a, b){ 
    return d3.ascending(a.Q, b.Q); 
}); 

Trả lời

11

Có vẻ như bạn cần chỉ định key function. Điều này cho phép bạn ràng buộc dữ liệu bằng một khóa tùy ý, thay vì dựa vào mặc định, đó là sử dụng vị trí của biểu đồ dữ liệu trong mảng, tức là thứ tự (trong trường hợp của bạn có thể thay đổi).

Nếu bạn chưa có một chìa khóa duy nhất cho mỗi mốc tính toán, bạn có thể luôn luôn chỉ cần tạo chúng nó trong lúc tải:

var id = 0; 
for (var i = 0; i < data.length; i++) data[i].id = id++; 

Nếu bạn tạo bất kỳ dữ liệu mới, bạn có thể tiếp tục tăng id để có được một ID mới, duy nhất.

Sau đó, đối với dữ liệu ràng buộc bạn có thể làm:

.data(data, function(d) { return d.id; }) 
+0

Cảm ơn bạn, Jason, một chức năng quan trọng đã làm các trick. – Mark

+3

Xem thêm [hướng dẫn về hằng số đối tượng] (http://bost.ocks.org/mike/constancy/), thảo luận về các chức năng chính. – mbostock

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