Tôi có một vòng lặp foreach góc và tôi muốn thoát khỏi vòng lặp nếu tôi khớp với một giá trị. Các mã sau không hoạt động.
angular.forEach([0,1,2], function(count){
if(count == 1){
break;
}
});
Làm thế nào tôi có thể nhận được điều này?
Tôi có một vòng lặp foreach góc và tôi muốn thoát khỏi vòng lặp nếu tôi khớp với một giá trị. Các mã sau không hoạt động.
angular.forEach([0,1,2], function(count){
if(count == 1){
break;
}
});
Làm thế nào tôi có thể nhận được điều này?
Câu trả lời:
Không có cách nào để làm điều này. Xem https://github.com/angular/angular.js/issues/263 . Tùy thuộc vào những gì bạn đang làm, bạn có thể sử dụng boolean để không đi vào phần thân của vòng lặp. Cái gì đó như:
var keepGoing = true;
angular.forEach([0,1,2], function(count){
if(keepGoing) {
if(count == 1){
keepGoing = false;
}
}
});
!keepGoing && return;
vào đầu hàm, ít mã hơn.
Các angular.forEach
vòng lặp không thể phá vỡ trên một trận đấu điều kiện.
Lời khuyên cá nhân của tôi là sử dụng vòng lặp NATIVE FOR thay vì angular.forEach
.
Vòng lặp NATIVE FOR nhanh hơn khoảng 90% so với vòng lặp khác.
SỬ DỤNG vòng lặp FOR ANGULAR:
var numbers = [0, 1, 2, 3, 4, 5];
for (var i = 0, len = numbers.length; i < len; i++) {
if (numbers[i] === 1) {
console.log('Loop is going to break.');
break;
}
console.log('Loop will continue.');
}
vui lòng sử dụng một số hoặc mọi phiên bản của ForEach,
Array.prototype.some:
some is much the same as forEach but it break when the callback returns true
Array.prototype.every:
every is almost identical to some except it's expecting false to break the loop.
Ví dụ cho một số:
var ary = ["JavaScript", "Java", "CoffeeScript", "TypeScript"];
ary.some(function (value, index, _ary) {
console.log(index + ": " + value);
return value === "JavaScript";
});
Ví dụ cho mọi:
var ary = ["JavaScript", "Java", "CoffeeScript", "TypeScript"];
ary.every(function(value, index, _ary) {
console.log(index + ": " + value);
return value.indexOf("Script") > -1;
});
Tìm thêm thông tin
http://www.jsnoob.com/2013/11/26/how-to-break-the-foreach/
Sử dụng một số phương thức Array
var exists = [0,1,2].some(function(count){
return count == 1
});
tồn tại sẽ trả về true và bạn có thể sử dụng điều này như một biến trong hàm của mình
if(exists){
console.log('this is true!')
}
angular.forEach()
là tôi phải hỗ trợ IE8, không có Array.forEach()
... hoặc Array.some()
.
Theo như tôi biết, Angular không cung cấp chức năng như vậy. Bạn có thể muốn sử dụng find()
chức năng gạch dưới cho việc này (về cơ bản là forEach sẽ thoát ra khỏi vòng lặp một khi hàm trả về đúng).
Nếu bạn sử dụng jQuery (do đó không phải là jqLite) kết hợp với AngularJS, bạn có thể lặp lại với $ .each - cho phép ngắt và tiếp tục dựa trên biểu thức giá trị trả về boolean.
Mã thông báo:
Javascript:
var array = ['foo', 'bar', 'yay'];
$.each(array, function(index, element){
if (element === 'foo') {
return true; // continue
}
console.log(this);
if (element === 'bar') {
return false; // break
}
});
Ghi chú:
Mặc dù sử dụng jQuery không phải là xấu, cả hai hàm Array.some hoặc Array.every đều được MDN khuyên dùng vì bạn có thể đọc tại tài liệu forEach gốc :
"Không có cách nào để dừng hoặc phá vỡ vòng lặp forEach. Giải pháp là sử dụng Array.every hoặc Array.some"
Các ví dụ sau được MDN cung cấp:
Mảng
function isBigEnough(element, index, array){
return (element >= 10);
}
var passed = [2, 5, 8, 1, 4].some(isBigEnough);
// passed is false
passed = [12, 5, 8, 1, 4].some(isBigEnough);
// passed is true
Array.every:
function isBigEnough(element, index, array){
return (element >= 10);
}
var passed = [12, 5, 8, 130, 44].every(isBigEnough);
// passed is false
passed = [12, 54, 18, 130, 44].every(isBigEnough);
// passed is true
Cụ thể, bạn có thể thoát khỏi một forEach
vòng lặp, và ở bất kỳ nơi nào, ném một ngoại lệ.
try {
angular.forEach([1,2,3], function(num) {
if (num === 2) throw Error();
});
} catch(e) {
// anything
}
Tuy nhiên, sẽ tốt hơn nếu bạn sử dụng thư viện khác hoặc thực hiện chức năng của riêng bạn, một find
chức năng trong trường hợp này, vì vậy mã của bạn là cấp cao nhất.
Như các câu trả lời khác, Angular không cung cấp chức năng này. Tuy nhiên, jQuery có và nếu bạn đã tải jQuery cũng như Angular, bạn có thể sử dụng
jQuery.each ( array, function ( index, value) {
if(condition) return false; // this will cause a break in the iteration
})
Thông thường không có cách nào để phá vỡ một vòng lặp "mỗi" trong javascript. Những gì có thể được thực hiện thường là sử dụng phương pháp "ngắn mạch".
array.forEach(function(item) {
// if the condition is not met, move on to the next round of iteration.
if (!condition) return;
// if the condition is met, do your logic here
console.log('do stuff.')
}
break
không thể đạt được trong forEach góc, chúng ta cần sửa đổi forEach để làm điều đó.
$scope.myuser = [{name: "Ravi"}, {name: "Bhushan"}, {name: "Thakur"}];
angular.forEach($scope.myuser, function(name){
if(name == "Bhushan") {
alert(name);
return forEach.break();
//break() is a function that returns an immutable object,e.g. an empty string
}
});
break()
cần phải được xác định hoặc wether nó đã là một phần của góc. Hãy xác định nếu không.
var ary = ["JavaScript", "Java", "CoffeeScript", "TypeScript"];
var keepGoing = true;
ary.forEach(function(value, index, _ary) {
console.log(index)
keepGoing = true;
ary.forEach(function(value, index, _ary) {
if(keepGoing){
if(index==2){
keepGoing=false;
}
else{
console.log(value)
}
}
});
});
$scope.arr = [0, 1, 2];
$scope.dict = {}
for ( var i=0; i < $scope.arr.length; i++ ) {
if ( $scope.arr[i] == 1 ) {
$scope.exists = 'yes, 1 exists';
break;
}
}
if ( $scope.exists ) {
angular.forEach ( $scope.arr, function ( value, index ) {
$scope.dict[index] = value;
});
}
Tôi muốn làm điều này bằng cách trở lại. Đặt phần lặp trong chức năng riêng tư và quay lại khi bạn muốn phá vỡ vòng lặp.
Tôi nhận ra điều này đã cũ, nhưng một bộ lọc mảng có thể làm những gì bạn cần:
var arr = [0, 1, 2].filter(function (count) {
return count < 1;
});
Sau đó bạn có thể chạy arr.forEach
và các chức năng mảng khác.
Tôi nhận ra rằng nếu bạn có ý định cắt giảm hoàn toàn các hoạt động vòng lặp, điều này có thể sẽ không làm những gì bạn muốn. Cho rằng bạn sử dụng tốt nhất while
.
Ví dụ này hoạt động. Thử nó.
var array = [0,1,2];
for( var i = 0, ii = array.length; i < ii; i++){
if(i === 1){
break;
}
}
for
vòng lặp, trường hợp sử dụng của anh ta không cần foreach
phải for
có lẽ
Sử dụng Return để phá vỡ vòng lặp.
angular.forEach([0,1,2], function(count){
if(count == 1) {
return;
}
});
onSelectionChanged(event) {
let selectdata = event['api']['immutableService']['gridOptionsWrapper']['gridOptions']['rowData'];
let selected_flag = 0;
selectdata.forEach(data => {
if (data.selected == true) {
selected_flag = 1;
}
});
if (selected_flag == 1) {
this.showForms = true;
} else {
this.showForms = false;
}
}
Tôi sẽ sử dụng return
thay vì break
.
angular.forEach([0,1,2], function(count){
if(count == 1){
return;
}
});
Hoạt động như một lá bùa.
Chỉ cần thêm chỉ mục $ và làm như sau:
angular.forEach([0,1,2], function(count, $index) {
if($index !== 1) {
// do stuff
}
}