Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

So sánh hai mảng đối tượng - JavaScript

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ả

false

Giả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).