Bir açısal foreach döngü var ve bir değer eşleşirse döngü kırmak istiyorum. Aşağıdaki kod çalışmıyor.
angular.forEach([0,1,2], function(count){
if(count == 1){
break;
}
});
Bunu nasıl alabilirim?
Bir açısal foreach döngü var ve bir değer eşleşirse döngü kırmak istiyorum. Aşağıdaki kod çalışmıyor.
angular.forEach([0,1,2], function(count){
if(count == 1){
break;
}
});
Bunu nasıl alabilirim?
Yanıtlar:
Bunu yapmanın bir yolu yok. Bkz. Https://github.com/angular/angular.js/issues/263 . Ne yaptığınıza bağlı olarak, sadece döngü gövdesine girmemek için bir boole kullanabilirsiniz. Gibi bir şey:
var keepGoing = true;
angular.forEach([0,1,2], function(count){
if(keepGoing) {
if(count == 1){
keepGoing = false;
}
}
});
!keepGoing && return;
fonksiyonun üstüne, daha az kod eklemek istiyorum .
angular.forEach
Döngü bir koşul maç kesemez.
Kişisel tavsiyem bunun yerine bir NATIVE FOR döngüsü kullanmaktır angular.forEach
.
NATIVE FOR döngüsü, döngüler için diğerinden yaklaşık % 90 daha hızlıdır.
ANGULAR'DA loop İÇİN KULLANIN:
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.');
}
lütfen ForEach'ın bazı veya her örneğini kullanın,
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.
Bazıları için örnek:
var ary = ["JavaScript", "Java", "CoffeeScript", "TypeScript"];
ary.some(function (value, index, _ary) {
console.log(index + ": " + value);
return value === "JavaScript";
});
Her biri için örnek:
var ary = ["JavaScript", "Java", "CoffeeScript", "TypeScript"];
ary.every(function(value, index, _ary) {
console.log(index + ": " + value);
return value.indexOf("Script") > -1;
});
Daha fazla bilgi için
http://www.jsnoob.com/2013/11/26/how-to-break-the-foreach/
Dizi Bazı Yöntemini Kullanma
var exists = [0,1,2].some(function(count){
return count == 1
});
exist doğru döndürür ve bunu işlevinizde bir değişken olarak kullanabilirsiniz
if(exists){
console.log('this is true!')
}
angular.forEach()
ben yok IE8, desteklemek zorunda olmasıdır Array.forEach()
... ya Array.some()
.
Bildiğim kadarıyla, Angular böyle bir işlev sağlamıyor. Alt çizgileri kullanmak isteyebilirsinizfind()
çizginin işlevini (temel olarak işlev doğru döndükten sonra döngüden kopan bir forEach).
AngularJS ile birlikte jQuery (dolayısıyla jqLite değil) kullanırsanız, boolean dönüş değeri ifadesine dayalı olarak kesme ve devam etmeyi sağlayan $ .each ile yineleme yapabilirsiniz.
JSFiddle:
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
}
});
Not:
JQuery kullanımı kötü olmasa da, yerel Array.some veya Array.every işlevlerini, yerel forEach belgelerinde okuyabileceğiniz gibi MDN tarafından önerilir :
"Bir forEach döngüsünü durdurmanın veya kırmanın bir yolu yoktur. Çözüm Array.every veya Array.some kullanmaktır"
MDN tarafından aşağıdaki örnekler verilmektedir:
Array.some:
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
Somut olarak, bir forEach
döngüden çıkabilir ve herhangi bir yerden bir istisna atabilirsiniz.
try {
angular.forEach([1,2,3], function(num) {
if (num === 2) throw Error();
});
} catch(e) {
// anything
}
Bununla birlikte, başka bir kitaplık kullanıyorsanız veya kendi işlevinizi, find
bu durumda bir işlevi uygulamanız daha iyidir , bu nedenle kodunuz en üst düzeydedir.
Diğer cevapların belirttiği gibi, Angular bu işlevi sağlamaz. jQuery bunu yapar ve jQuery'yi Angular'ın yanı sıra yüklediyseniz,
jQuery.each ( array, function ( index, value) {
if(condition) return false; // this will cause a break in the iteration
})
Normalde javascript içinde bir "her" döngü kırmak için bir yolu yoktur. Genelde yapılabilecekler “kısa devre” yöntemini kullanmaktır.
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
her açısal forEach içinde elde etmek mümkün değil, bunu yapmak için forEach'ı değiştirmemiz gerekiyor.
$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()
veya zaten açısal bir parçası olup olmadığını belirtin. Lütfen değilse tanımlayın.
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;
});
}
Bunu dönüşle yapmayı tercih ederim. Döngü parçasını özel işleve koyun ve döngüyü kırmak istediğinizde geri dönün.
Bu eski, ama bir dizi filtre gerekeni yapabilir farkında:
var arr = [0, 1, 2].filter(function (count) {
return count < 1;
});
Daha sonra arr.forEach
ve diğer dizi işlevlerini çalıştırabilirsiniz .
Döngü işlemlerini tamamen kısmak istiyorsanız, bunun muhtemelen istediğinizi yapmayacağını anlıyorum. Bunun için en iyi şekilde kullanın while
.
Bu örnek işe yarar. Dene.
var array = [0,1,2];
for( var i = 0, ii = array.length; i < ii; i++){
if(i === 1){
break;
}
}
for
döngü istemiyor , kullanım durumunun muhtemelen foreach
değilfor
Döngüyü kırmak için Return tuşunu kullanın.
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;
}
}
Bunun return
yerine kullanırdım break
.
angular.forEach([0,1,2], function(count){
if(count == 1){
return;
}
});
Tıkır tıkır çalışıyor.
Sadece $ index ekleyin ve aşağıdakileri yapın:
angular.forEach([0,1,2], function(count, $index) {
if($index !== 1) {
// do stuff
}
}