Saya memiliki loop foreach sudut dan saya ingin istirahat dari loop jika saya cocok dengan nilai. Kode berikut tidak berfungsi.
angular.forEach([0,1,2], function(count){
if(count == 1){
break;
}
});
Bagaimana saya bisa mendapatkan ini?
Saya memiliki loop foreach sudut dan saya ingin istirahat dari loop jika saya cocok dengan nilai. Kode berikut tidak berfungsi.
angular.forEach([0,1,2], function(count){
if(count == 1){
break;
}
});
Bagaimana saya bisa mendapatkan ini?
Jawaban:
Tidak ada cara untuk melakukan ini. Lihat https://github.com/angular/angular.js/issues/263 . Bergantung pada apa yang Anda lakukan, Anda bisa menggunakan boolean untuk tidak masuk ke dalam loop. Sesuatu seperti:
var keepGoing = true;
angular.forEach([0,1,2], function(count){
if(keepGoing) {
if(count == 1){
keepGoing = false;
}
}
});
!keepGoing && return;
ke bagian atas fungsi, lebih sedikit kode.
The angular.forEach
Loop tidak dapat mematahkan pada pertandingan kondisi.
Saran pribadi saya adalah menggunakan loop NATIVE FOR sebagai gantinya angular.forEach
.
Loop NATIVE FOR sekitar 90% lebih cepat daripada loop lainnya.
GUNAKAN UNTUK loop DI 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.');
}
silakan gunakan beberapa atau setiap contoh 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.
Contoh untuk beberapa:
var ary = ["JavaScript", "Java", "CoffeeScript", "TypeScript"];
ary.some(function (value, index, _ary) {
console.log(index + ": " + value);
return value === "JavaScript";
});
Contoh untuk setiap:
var ary = ["JavaScript", "Java", "CoffeeScript", "TypeScript"];
ary.every(function(value, index, _ary) {
console.log(index + ": " + value);
return value.indexOf("Script") > -1;
});
Temukan informasi lebih lanjut
http://www.jsnoob.com/2013/11/26/how-to-break-the-foreach/
Gunakan Metode Array Some
var exists = [0,1,2].some(function(count){
return count == 1
});
ada akan mengembalikan true, dan Anda dapat menggunakan ini sebagai variabel dalam fungsi Anda
if(exists){
console.log('this is true!')
}
angular.forEach()
adalah bahwa saya harus mendukung IE8, yang tidak memiliki Array.forEach()
... atau Array.some()
.
Sejauh yang saya tahu, Angular tidak menyediakan fungsi seperti itu. Anda mungkin ingin menggunakan find()
fungsi garis bawah untuk ini (itu pada dasarnya forEach yang keluar dari loop setelah fungsi mengembalikan true).
Jika Anda menggunakan jQuery (maka bukan jqLite) bersama dengan AngularJS Anda dapat mengulangi dengan $ .each - yang memungkinkan pemecahan dan melanjutkan berdasarkan pada ekspresi nilai pengembalian boolean.
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
}
});
catatan:
Meskipun menggunakan jQuery tidak buruk, baik fungsi Array.some atau Array.every asli direkomendasikan oleh MDN karena Anda dapat membaca di dokumentasi forEach asli :
"Tidak ada cara untuk menghentikan atau memutus loop forEach. Solusinya adalah menggunakan Array. Setiap atau Array. Beberapa"
Contoh-contoh berikut disediakan oleh MDN:
Array. Beberapa:
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. Setiap:
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
Secara konkret, Anda dapat keluar dari forEach
loop, dan di mana saja, melempar pengecualian.
try {
angular.forEach([1,2,3], function(num) {
if (num === 2) throw Error();
});
} catch(e) {
// anything
}
Namun, lebih baik jika Anda menggunakan pustaka lain atau mengimplementasikan fungsi Anda sendiri, find
fungsi dalam kasus ini, sehingga kode Anda paling tinggi.
Sebagai jawaban lain menyatakan, Angular tidak menyediakan fungsi ini. Namun jQuery melakukannya, dan jika Anda telah memuat jQuery dan juga Angular, Anda dapat menggunakannya
jQuery.each ( array, function ( index, value) {
if(condition) return false; // this will cause a break in the iteration
})
Biasanya tidak ada cara untuk memutus loop "setiap" di javascript. Yang bisa dilakukan biasanya adalah menggunakan metode "korsleting".
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
tidak mungkin untuk dicapai dalam forEach sudut, kita perlu memodifikasi forEach untuk melakukan itu.
$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()
perlu ditentukan atau apakah itu sudah merupakan bagian dari sudut. Silakan tentukan jika tidak.
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;
});
}
Saya lebih suka melakukan ini dengan kembali. Letakkan bagian perulangan di fungsi pribadi dan kembali ketika Anda ingin memutus loop.
Saya menyadari ini sudah tua, tetapi filter array dapat melakukan apa yang Anda butuhkan:
var arr = [0, 1, 2].filter(function (count) {
return count < 1;
});
Anda kemudian dapat menjalankan arr.forEach
dan fungsi array lainnya.
Saya menyadari bahwa jika Anda bermaksud untuk mengurangi operasi loop sama sekali, ini mungkin tidak akan melakukan apa yang Anda inginkan. Untuk itu sebaiknya Anda gunakan while
.
Contoh ini berhasil. Cobalah.
var array = [0,1,2];
for( var i = 0, ii = array.length; i < ii; i++){
if(i === 1){
break;
}
}
for
loop, kasus penggunaannya foreach
tidak for
mungkin
Gunakan Return untuk memutus loop.
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;
}
}
Saya akan menggunakan return
sebagai gantinya break
.
angular.forEach([0,1,2], function(count){
if(count == 1){
return;
}
});
Bekerja seperti pesona.
Cukup tambahkan $ index dan lakukan yang berikut ini:
angular.forEach([0,1,2], function(count, $index) {
if($index !== 1) {
// do stuff
}
}