Cho hai mảng đối tượng blocks và containers. Cần kiểm tra xem mọi id trong blocks có tồn tại trong thuộc tính block.id của containers hay không. Trả về true nếu tất cả đều tồn tại, ngược lại trả về false.
Dữ liệu mẫu
const blocks = [
{ id: 1 },
{ id: 2 },
{ id: 3 },
{ id: 4 },
];
const containers = [
{ block: { id: 1 } },
{ block: { id: 2 } },
{ block: { id: 3 } },
];Giải pháp
Duyệt qua mảng blocks, với mỗi id kiểm tra sự tồn tại trong containers bằng vòng lặp lồng hoặc Set để tối ưu.
const blocks = [
{ id: 1 },
{ id: 2 },
{ id: 3 },
{ id: 4 },
];
const containers = [
{ block: { id: 1 } },
{ block: { id: 2 } },
{ block: { id: 3 } },
];
const checkProperty = (first, second) => {
// Tạo Set chứa các id từ containers để tra cứu O(1)
const containerIds = new Set(second.map(item => item.block.id));
// Kiểm tra từng id trong blocks
for (let i = 0; i < first.length; i++) {
if (!containerIds.has(first[i].id)) {
return false;
}
}
return true;
};
console.log(checkProperty(blocks, containers));Kết quả
falseGiải thích: blocks có id = 4 nhưng containers không chứa id này, nên trả về false.
Cải tiến: Sử dụng Set thay vì vòng lặp lồng giúp giảm độ phức tạp từ O(n×m) xuống O(n+m).