Hàm forEach[]
của JavaScript thực thi một hàm trên mọi phần tử trong một mảng. Tuy nhiên, vì forEach[]
là một hàm chứ không phải là một vòng lặp nên việc sử dụng câu lệnh break
là một lỗi cú pháp
trừ khi bạn có lý do chính đáng để không. Tuy nhiên, nếu bạn thấy mình mắc kẹt với một forEach[]
cần dừng sau một thời điểm nhất định và việc tái cấu trúc để sử dụng for/of
không phải là một lựa chọn, đây là 4 cách giải quyết
1. Sử dụng every[]
thay vì forEach[]
Hàm every[]
hoạt động giống như hàm forEach[]
, ngoại trừ việc nó dừng lặp qua mảng bất cứ khi nào hàm gọi lại trả về một giá trị sai
Với every[]
, forEach[]
1 tương đương với một break
, và forEach[]
3 tương đương với một forEach[]
4
Một cách khác là sử dụng hàm forEach[]
5, tương tự nhưng chỉ lật các giá trị boolean. Với forEach[]
5, forEach[]
3 tương đương với break
và forEach[]
1 tương đương với forEach[]
4
2. Lọc ra các giá trị bạn muốn bỏ qua
Thay vì nghĩ về cách break
ra khỏi một forEach[]
, hãy thử nghĩ về cách lọc ra tất cả các giá trị mà bạn không muốn forEach[]
lặp lại. Cách tiếp cận này phù hợp hơn với các nguyên tắc lập trình chức năng
Hàm break
4 nhận một cuộc gọi lại và trả về chỉ mục đầu tiên của mảng có giá trị mà cuộc gọi lại trả về trung thực cho. Sau đó, hàm break
5 sao chép một phần của mảng
3. Sử dụng một biến cục bộ break
6
Nếu bạn không thể sử dụng every[]
hoặc break
5, bạn có thể kiểm tra cờ break
6 khi bắt đầu cuộc gọi lại forEach[]
của mình. Nếu bạn đặt break
6 thành for/of
2, cuộc gọi lại forEach[]
trả về ngay lập tức
Cách tiếp cận này rườm rà và không trang nhã, nhưng nó hoạt động với chi phí đầu óc tối thiểu. Bạn có thể sử dụng phương pháp này nếu các phương pháp trước đây có vẻ quá thông minh
4. Sửa đổi chiều dài mảng
Hàm forEach[]
tôn trọng các thay đổi đối với thuộc tính for/of
5 của mảng. Vì vậy, bạn có thể buộc forEach[]
thoát ra khỏi vòng lặp sớm bằng cách ghi đè lên thuộc tính for/of
5 của mảng như hình bên dưới
Trong khi phương pháp này hoạt động, nó cũng làm thay đổi mảng. Nếu bạn thay đổi độ dài của mảng, bạn sẽ cắt bớt mảng một cách hiệu quả. các hoạt động tiếp theo, như for/of
hoặc for/of
9 sẽ chỉ đi qua phiên bản rút gọn của mảng. Không nên sử dụng phương pháp này để thoát ra khỏi vòng lặp forEach[]
Câu lệnh break
kết thúc vòng lặp hiện tại, switch
hoặc câu lệnh nhãn và chuyển điều khiển chương trình sang câu lệnh theo sau câu lệnh đã kết thúc
break;
break label;
label
Tùy chọnMã định danh được liên kết với nhãn của câu lệnh. Nếu câu lệnh không phải là vòng lặp hoặc switch
, điều này là bắt buộc
Câu lệnh break
bao gồm một nhãn tùy chọn cho phép chương trình thoát ra khỏi câu lệnh có nhãn. Câu lệnh break
cần được lồng trong nhãn được tham chiếu. Câu lệnh được gắn nhãn có thể là bất kỳ câu lệnh khối nào;
Câu lệnh break
, có hoặc không có nhãn sau, không thể được sử dụng trong phần thân của hàm được lồng trong câu lệnh vòng lặp, công tắc hoặc nhãn hiện tại mà câu lệnh break
nhằm thoát ra khỏi
Hàm sau đây có câu lệnh break
kết thúc vòng lặp
function testBreak[x] {
let i = 0;
while [i