Cách 'tiếp tục' bên trong mỗi vòng lặp: gạch dưới, node.js


80

Mã trong node.js đủ đơn giản.

_.each(users, function(u, index) {
  if (u.superUser === false) {
    //return false would break
    //continue?
  }
  //Some code
});

Câu hỏi của tôi là làm thế nào tôi có thể tiếp tục chỉ mục tiếp theo mà không thực hiện "Một số mã" nếu superUser được đặt thành false?

Tái bút: Tôi biết một điều kiện khác sẽ giải quyết được vấn đề. Vẫn tò mò muốn biết câu trả lời.

Câu trả lời:


137
_.each(users, function(u, index) {
  if (u.superUser === false) {
    return;
    //this does not break. _.each will always run
    //the iterator function for the entire array
    //return value from the iterator is ignored
  }
  //Some code
});

Lưu ý rằng với lodash (không phải gạch dưới) _.forEachnếu bạn muốn kết thúc sớm "vòng lặp", bạn có thể rõ ràng return falsetừ hàm iteratee và lodash sẽ kết thúc forEachvòng lặp sớm.


Tại sao điều này không được áp dụng? developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Con Antonakos

6
Bởi vì _.eachvà một for () {}vòng lặp thông thường không giống nhau.
Peter Lyons

@ConAntonakos Khi bạn sử dụng for-each(collection, callback)trong JS, không có bất kỳ vòng lặp for nào bên trong callbackdo đó break/continuekhông áp dụng được.
pgpb.padilla

12

Thay vì continuecâu lệnh trong vòng lặp for, bạn có thể sử dụng returncâu lệnh _.each()trong underscore.js, nó sẽ chỉ bỏ qua lần lặp hiện tại.


0
_.each(users, function(u, index) {
  if (u.superUser) {
    //Some code
  }
});

Lấy làm tiếc. Tôi nên đặt kịch bản chi tiết. Tôi cần thực thi một số mã nếu super user là false và sau đó tiếp tục. Sẽ có một điều kiện khác nói rằng, nếu (superUser! = False && được kích hoạt) mà tôi cần làm điều gì đó khác và thực thi "Một số mã" và sau đó có một điều kiện khác mà tôi cần thực hiện "Một số mã". Tôi chỉ muốn biết liệu có cách nào để làm điều đó mà không cần viết lại cùng một đoạn mã bên trong cả if và else hay không. Tôi không muốn tạo một chức năng khác cho việc này.

1
Anh ta đang hỏi làm thế nào để tránh việc thực hành mã mũi tên rất kém.
David Betz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.