Các mẫu thường gặp với mảng 2 chiều
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 13 trên 65.
Một số mẫu thường xuất hiện khi làm việc với mảng 2D. Nhận biết các mẫu này có thể giúp bạn giải quyết vấn đề hiệu quả hơn. Dưới đây là một vài mẫu phổ biến:
Duyệt theo đường chéo
Truy cập các phần tử có chỉ số hàng bằng chỉ số cột (matrix[i][i]) để lấy đường chéo chính. Với đường chéo phụ, tổng chỉ số hàng và chỉ số cột bằng kích thước mảng trừ đi 1 (matrix[i][size - 1 - i]).
Ví dụ:
1 2 3
4 5 6
7 8 9Duyệt qua đường chéo chính (matrix[i][i]): 1, 5, 9
Duyệt qua đường chéo phụ (matrix[i][size - 1 - i]): 3, 5, 7
Duyệt đường viền
Để duyệt các phần tử ở đường viền, bạn giữ một chỉ số cố định (0 hoặc size - 1) trong khi lặp qua chỉ số còn lại.
Để truy cập đường viền trên cùng, bạn lặp qua các cột và giữ chỉ số hàng cố định ở mức 0.
Ví dụ:
1 2 3 4
5 6 7 8
9 10 11 12các phần tử ở viền: 1, 2, 3, 4, 8, 12, 11, 10, 9, 5 (tất cả trừ 6 và 7)
Thử thách
DễTạo một hàm (function) có tên printPatterns, nhận một mảng (array) hai chiều hình vuông gồm các số nguyên (integer) (matrix) làm đầu vào (input) và in ra các mẫu sau:
- Đường chéo chính: In ra tất cả phần tử có chỉ số hàng bằng chỉ số cột.
- Đường chéo phụ: In ra tất cả phần tử có tổng chỉ số hàng và chỉ số cột bằng kích thước của ma trận trừ 1.
- Các cạnh: In ra các phần tử ở cạnh trên, dưới, trái và phải của ma trận.
Đầu ra sẽ trông như sau:
Main Diagonal: 1 6 11 16
Anti-Diagonal: 4 7 10 13
Top Border: 1 2 3 4
Bottom Border: 13 14 15 16
Left Border: 1 5 9 13
Right Border: 4 8 12 16Tự làm thử
function printPatterns(matrix) {
let mainDiagonal = []
// TODO: Triển khai
console.log("Main Diagonal:", mainDiagonal.join(" "));
let antiDiagonal = [];
// TODO: Triển khai
console.log("Anti-Diagonal:", antiDiagonal.join(" "));
let topBorder = [];
// TODO: Triển khai
console.log("Top Border:", topBorder.join(" "));
let bottomBorder = [];
// TODO: Triển khai
console.log("Bottom Border:", bottomBorder.join(" "));
let leftBorder = [];
// TODO: Triển khai
console.log("Left Border:", leftBorder.join(" "));
let rightBorder = [];
// TODO: Triển khai
console.log("Right Border:", rightBorder.join(" "));
}
// Không viết gì bên ngoài hàmBà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