Tối ưu hóa các vòng lặp thừa trong JavaScript
Trong đoạn mã sau, một lập trình viên nào đó kiểm tra xem
trong mảng có số 3 hay không:
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let exists = false;
for (let elem of arr) {
if (elem === 3) {
exists = true;
}
}
console.log(exists);
Có vấn đề gì với giải pháp của anh ta? Có vẻ như không có
thao tác thừa nào trong vòng lặp. Tuy nhiên, vấn đề
là sau khi xác định rằng số 3
có trong mảng, vòng lặp
vẫn tiếp tục chạy cho đến cuối mảng.
Sẽ không hiệu quả nhất nếu số 3
được tìm thấy ở đâu đó đầu mảng, còn bản thân mảng
có độ dài, chẳng hạn, 1000 phần tử.
Sẽ có một nghìn lần lặp vô ích thừa!
Không tối ưu.
Hãy tối ưu hóa mã bằng cách dừng vòng lặp kịp thời:
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let exists = false;
for (let elem of arr) {
if (elem === 3) {
exists = true;
break;
}
}
console.log(exists);
Đoạn mã sau đếm xem cần cộng bao nhiêu
phần tử của mảng
để tổng lớn hơn 10.
Hãy thực hiện tối ưu hóa:
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let sum = 0;
let i = 1;
for (let elem of arr) {
sum += elem;
if (sum <= 10) {
i++;
}
}
console.log(i);
Đoạn mã sau in các số chẵn từ một khoảng cho trước. Hãy thực hiện tối ưu hóa:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0) {
console.log(i);
}
}
Đoạn mã sau in các số
chia hết đồng thời cho 2
và cho 3. Hãy thực hiện tối ưu hóa:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0 && i % 3 === 0) {
console.log(i);
}
}
Đoạn mã sau tìm tất cả các thứ Sáu
ngày 13 trong năm hiện tại.
Hãy thực hiện tối ưu hóa:
for (let i = 0; i <= 11; i++) {
let curr = new Date;
let last = new Date(curr.getFullYear(), i + 1, 0).getDate();
for (let j = 1; j <= last; j++) {
let date = new Date(curr.getFullYear(), i, j);
if (date.getDate() === 13 && date.getDay() === 5) {
console.log(date);
}
}
}