Menu
CoddyTech

Tập con và tập cha

Thuộc phần Logic và luồng chương trình trong hành trình JavaScript của Coddy. Bài học 40 trên 65.

Tập hợp A là tập con của tập hợp B nếu mọi phần tử của A cũng là phần tử của B. Ngược lại, B là tập hợp cha của A nếu nó chứa tất cả phần tử của A.

Hai tập hợp bằng nhau nếu chúng chứa chính xác cùng các phần tử. Ví dụ, hãy tạo một vài bài kiểm tra:

const setA = new Set([1, 2, 3]);
const setB = new Set([1, 2, 3, 4, 5]);
const setC = new Set([1, 2, 3]);
const setD = new Set([6, 7, 8]);

Hàm (function) kiểm tra xem setA có phải là tập hợp con của setB hay không:

function isSubset(setA, setB) {
  return [...setA].every(element => setB.has(element));
}

Hàm (function) để kiểm tra xem setA có phải là tập cha của setB hay không:

function isSuperset(setA, setB) {
  return isSubset(setB, setA);
}

Hàm (function) kiểm tra xem hai tập hợp có bằng nhau hay không:

function areEqual(setA, setB) {
  return setA.size === setB.size && isSubset(setA, setB);
}

Kiểm tra quan hệ tập con:

// A có phải là tập con của B không? 
isSubset(setA, setB) // true
// B có phải là tập con của A không? 
isSubset(setB, setA) // false
// D có phải là tập con của B không? 
isSubset(setD, setB) // false

Kiểm tra mối quan hệ tập hợp cha:

// B có phải là tập hợp cha của A không?
isSuperset(setB, setA) // true
// A có phải là tập hợp cha của B không?
isSuperset(setA, setB) // false

Kiểm tra tính bằng nhau:

// A có bằng C không?
areEqual(setA, setC) // true
// A có bằng B không?
areEqual(setA, setB) // false
// A có bằng D không?
areEqual(setA, setD) // false
challenge icon

Thử thách

Dễ

Tạo một hàm có tên analyzeSetRelations, nhận hai mảng làm tham số: arr1 và arr2. Hàm này cần chuyển các mảng thành tập hợp và trả về một đối tượng có các thuộc tính sau:

  • isSubset: giá trị Boolean cho biết set1 có phải là tập con của set2 hay không
  • isSuperset: giá trị Boolean cho biết set1 có phải là tập cha của set2 hay không
  • isEqual: giá trị Boolean cho biết set1 và set2 có chính xác cùng các phần tử hay không

Tự làm thử

function analyzeSetRelations(arr1, arr2) {
    let set1 = new Set(arr1);
    let set2 = new Set(arr2);

    // Dùng .every() và .has() để kiểm tra quan hệ giữa các tập hợp
    let isSubset = false;   // TODO: kiểm tra xem mọi phần tử của set1 có nằm trong set2 không
    let isSuperset = false; // TODO: kiểm tra xem mọi phần tử của set2 có nằm trong set1 không
    let isEqual = false;    // TODO: kiểm tra xem hai tập hợp có cùng kích thước và isSubset là true không

    return {
        isSubset: isSubset,
        isSuperset: isSuperset,
        isEqual: isEqual
    };
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch JavaScript online