Làm việc với cờ (flag) trong JavaScript
Bây giờ chúng ta sẽ học cách làm việc với cờ (flag).
Flag là một biến đặc biệt, chỉ có thể
mang một trong hai giá trị: true
và false. Với sự trợ giúp của flag, chúng ta có thể giải quyết
các nhiệm vụ kiểm tra sự vắng mặt của một thứ gì đó:
ví dụ: có thể kiểm tra xem trong mảng
có phần tử với một giá trị nhất định hay không. Hãy
bắt đầu.
Hãy giải quyết nhiệm vụ sau: cho một mảng
các số, cần kiểm tra xem trong đó có
phần tử với giá trị 3 hay không. Nếu
có - in ra '+++', nếu không -
in ra '---'.
Trước tiên, hãy thử in ra '+++'.
Để làm điều này, chúng ta sẽ duyệt qua tất cả các phần tử của mảng
và dùng câu lệnh if để hỏi - phần tử hiện tại
có bằng giá trị 3 hay không. Nếu bằng - chúng ta sẽ in ra
'+++':
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
}
}
Nhưng giải pháp của chúng ta không tốt lắm: vì nếu
trong mảng không phải chỉ có một giá trị 3,
mà có vài giá trị, thì '+++' sẽ được in ra nhiều lần.
Hãy sửa mảng của chúng ta (tạo ra
hai phần tử với giá trị 3) và đảm bảo điều này:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // sẽ in ra nhiều lần
}
}
Hãy sửa vấn đề: kết thúc vòng lặp bằng cách sử dụng
break, nếu phần tử đã được tìm thấy:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
break; // kết thúc vòng lặp
}
}
Bây giờ hãy thử làm sao để,
nếu trong mảng hoàn toàn không có phần tử nào với giá trị
3, thì in ra '---'. Một quan niệm sai lầm
phổ biến là thêm else vào
câu lệnh if của chúng ta - trong trường hợp này '---' sẽ
được in ra cho tất cả các phần tử không phải là
3:
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // sẽ in ra trên phần tử 3
} else {
console.log('---'); // sẽ in ra trên các phần tử 1, 2, 4, 5
}
}
Vậy, ý tưởng thêm else là một ý tưởng
tồi, không hoạt động. Để giải quyết các nhiệm vụ kiểu này
(các nhiệm vụ như vậy xảy ra khá
thường xuyên) người ta sử dụng cái gọi là flag.
Như đã đề cập ở trên, flag là một
biến như vậy, chỉ có thể mang hai giá trị:
true hoặc false.
Vậy, hãy tạo biến flag
với ý nghĩa như sau: nếu nó bằng true,
thì trong mảng có phần tử 3, còn nếu
là false, thì không có phần tử như vậy.
Ban đầu, đặt biến flag
về giá trị false - nghĩa là chúng ta sẽ coi rằng
phần tử 3 không có trong mảng:
let arr = [1, 2, 3, 4, 5];
let flag = false; // coi như không có phần tử 3 trong mảng
Sau đó chúng ta sẽ chạy vòng lặp với câu lệnh if như chúng ta đã làm
trước đây. Nếu vòng lặp phát hiện ra rằng trong mảng
có phần tử 3 - thì chúng ta sẽ đặt biến flag
về giá trị true và thoát khỏi vòng lặp
bằng break:
let arr = [1, 2, 3, 4, 5];
let flag = false; // coi như không có phần tử 3 trong mảng
for (let elem of arr) {
if (elem == 3) {
flag = true; // có phần tử - định nghĩa lại biến flag
break; // thoát khỏi vòng lặp
}
}
Câu trả lời cho câu hỏi, liệu trong mảng có 3
hay không, chúng ta chỉ có thể đưa ra sau vòng lặp.
Và chúng ta đã có câu trả lời này: sau vòng lặp
biến flag có thể vẫn là false
hoặc có thể đã thay đổi giá trị của nó thành true,
nếu vòng lặp phát hiện ra trong mảng có 3:
let arr = [1, 2, 3, 4, 5];
let flag = false;
for (let elem of arr) {
if (elem == 3) {
flag = true;
break;
}
}
// ở đây biến flag bằng true hoặc false
Bây giờ sau vòng lặp chúng ta có thể tạo một câu lệnh if, câu lệnh này
sẽ nhìn vào biến flag và in ra
màn hình '+++' hoặc '---':
let arr = [1, 2, 3, 4, 5];
let flag = false;
for (let elem of arr) {
if (elem == 3) {
flag = true;
break;
}
}
if (flag === true) {
console.log('+++');
} else {
console.log('---');
}
Cho một mảng:
let arr = ['a', 'b', 'c', 'd', 'e'];
Hãy kiểm tra xem trong mảng này có phần tử
'c' hay không. Nếu có - hãy in ra '+++',
còn nếu không - hãy in ra '---'.
Hãy viết mã để kiểm tra một số xem nó có phải là số nguyên tố hay không. Số nguyên tố chỉ chia hết cho một và cho chính nó, và không chia hết cho các số khác.