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) // falseKiể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) // falseKiể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) // falseThử 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ếtset1có phải là tập con củaset2hay khôngisSuperset: giá trị Boolean cho biếtset1có phải là tập cha củaset2hay khôngisEqual: giá trị Boolean cho biếtset1vàset2có 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
};
}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
4JSON phần 2
Duyệt qua JSONJSON lồng nhauOptional chaining trong JSONSao chép nông và sâuÔn tập: Cửa hàng xe đạpÔn tập: Hệ Mặt Trời7Hệ thống quản lý thư viện
Tổng quan dự ánThêm sách10Quản lý hệ thống lễ hội
Tổng quan dự ánThêm phim và địa điểm2Mảng nhiều chiều
Kiến thức cơ bản về mảng 2 chiềuTruy cập phần tử trong mảng 2 chiềuVòng lặp lồng nhau với mảng 2 chiềuÔn tập về mảng 2 chiềuPhép cộng và phép trừ ma trậnMảng không đềuMảng 3 chiều và hơn nữaCác mẫu thường gặp với mảng 2 chiềuÔn tập về mảng3JSON phần 1
JSON là gì?Kiểm tra khóa có tồn tạiPhương thức của đối tượngToán tử spread phần 1Toán tử spread phần 2Xóa khóaÔn tập: thao tác với khóa trong JSONTự luyện tập: Trình biên dịch JavaScript online