Xin chào mọi người, mình gà và mình đang gặp bài toán này hơi bí rất mong được mọi người trợ giúp. Mình đang có một cây với cấu trúc như sau:
-|NhaXuanBan
–|ChuDe
—|LoaiBai
----|BaiViet
Trong đó, các class được tổ chức theo dạng cứ là parent sẽ lưu id các child trong list đặt tên là children như sau:
Class NhaXuanBan:
- IDNhaXuanBan
- chirldren: [luat:102, doisong:103]
** chirldren là danh sách định danh các loại chủ đề lưu theo dạng string “ten:ID” - …các thuộc tính khác
ChuDe: là một mảng tự động sinh ra trên UI, tự động gom nhóm loại bài viết theo một thuật toán gì đó, tương tự class NhaXuatBan cũng có mảng chirldren là danh sách định danh các loại chủ đề.
Class LoaiBai:
- IDLoaiBai
- chirldren: [luat:102:luat113, luat:102:luat114, doisong:103:ds236, doisong:103:ds113]
**chirldren là danh sách định danh các bài viết lưu theo dạng string theo format
“tenLoaiBai:IDLoaiBai:IdBaiViet” - …các thuộc tính khác
Class BaiViet:
-IDBaiViet // lưu theo dạng string với format “tenLoaiBai:IDLoaiBai:IdBaiViet”
…các thuộc tính khác
Vấn đề đặt ra ở đây là so sánh giống nhau (==) các đối tượng trên.
- Với BaiViet thì đơn giản vì nó là object nên mình chỉ cần so sánh 2 object (BaiVietA===BaiVietB) với nhau là xong.
- Với LoaiBaiViet thì mình dùng vòng lặp, lặp qua mảng children sẽ có các ID của bài viết, nhờ đó dựa vào ID lấy value của bài viết ra để so sánh.
function SomeFunction( LoaiBaiVietA, LoaiBaiVietB )
for ( let IDBaiVietA of LoaiBaiVietA.chirldren) {
let Flag = false;
for ( let IDBaiVietB of LoaiBaiVietB.chirldren) {
if ( LayBaiVietTheoID(IDBaiVietA) === LayBaiVietTheoID(IDBaiVietA) ) {
Flag = true;
break;
}
}
if(Flag){
break;
}
}
if(Flag){
//Do something here
//Do something here
//Do something here
}
Mới tới đây mình đã phải dùng 2 vòng lặp lồng nhau rồi, còn so sánh chủ đề, nhà xuất bản nữa mình phải lồng thêm vòng lặp vô thì thấy không ổn một chút nào, nhất là khi xử lý cơ sở dữ liệu lớn thì càng không được, rất mong được mọi người giúp đỡ cho hướng giải quyết. Mình xin trân trọng cảm ơn.
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?