Bạn có thể thoát ra khỏi JavaScript vòng lặp for không?

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 breakforEach[]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 break4 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 break5 sao chép một phần của mảng

3. Sử dụng một biến cục bộ break6

Nếu bạn không thể sử dụng every[] hoặc break5, bạn có thể kiểm tra cờ break6 khi bắt đầu cuộc gọi lại forEach[] của mình. Nếu bạn đặt break6 thành for/of2, 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/of5 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/of5 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/of9 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ọn

Mã đị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 

Chủ Đề