У мене є кутова петля переднього плану, і я хочу перерватися з циклу, якщо я збігаюся зі значенням. Наступний код не працює.
angular.forEach([0,1,2], function(count){
if(count == 1){
break;
}
});
Як я можу це отримати?
У мене є кутова петля переднього плану, і я хочу перерватися з циклу, якщо я збігаюся зі значенням. Наступний код не працює.
angular.forEach([0,1,2], function(count){
if(count == 1){
break;
}
});
Як я можу це отримати?
Відповіді:
Немає цього зробити. Дивіться https://github.com/angular/angular.js/isissue/263 . Залежно від того, що ви робите, ви можете використовувати булеву форму, щоб просто не потрапляти в тіло петлі. Щось на зразок:
var keepGoing = true;
angular.forEach([0,1,2], function(count){
if(keepGoing) {
if(count == 1){
keepGoing = false;
}
}
});
!keepGoing && return;
верхню частину функції, менше коду.
angular.forEach
Цикл не може зламатися на матчі стану.
Моя особиста порада замість цього використовувати цикл NATIVE FORangular.forEach
.
Цикл NATIVE FOR на 90% швидший, ніж інший для циклів.
ВИКОРИСТАННЯ ДЛЯ ШЛЯХУ В АНГУЛЬНОМУ:
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.');
}
будь ласка, використовуйте деякі або всі екземпляри 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.
Приклад для деяких:
var ary = ["JavaScript", "Java", "CoffeeScript", "TypeScript"];
ary.some(function (value, index, _ary) {
console.log(index + ": " + value);
return value === "JavaScript";
});
Приклад для кожного:
var ary = ["JavaScript", "Java", "CoffeeScript", "TypeScript"];
ary.every(function(value, index, _ary) {
console.log(index + ": " + value);
return value.indexOf("Script") > -1;
});
Знайдіть більше інформації
http://www.jsnoob.com/2013/11/26/how-to-break-the-foreach/
Використовуйте метод масиву
var exists = [0,1,2].some(function(count){
return count == 1
});
існує, повернеться true, і ви можете використовувати це як змінну у своїй функції
if(exists){
console.log('this is true!')
}
angular.forEach()
є те, що я повинен підтримувати IE8, у якого немає Array.forEach()
... або Array.some()
.
Наскільки мені відомо, Angular не забезпечує такої функції. Ви можете скористатися find()
для цього функцією підкреслення (це в основному forEach, який виривається з циклу, як тільки функція поверне значення true).
Якщо ви використовуєте jQuery (отже, не jqLite) спільно з AngularJS, ви можете повторити з $ .each - що дозволяє розбивати та продовжувати на основі булевого вираження зворотного значення.
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
}
});
Примітка:
Хоча використання jQuery не є поганим, обидві функції Array.some або Array.every рекомендуються MDN, як ви можете прочитати в натурній документації forEach :
"Немає можливості зупинити або зламати цикл forEach. Рішення полягає у використанні Array.every або Array.some"
Наступні приклади надаються MDN:
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
Конкретно, ви можете вийти з forEach
циклу і з будь-якого місця викинути виняток.
try {
angular.forEach([1,2,3], function(num) {
if (num === 2) throw Error();
});
} catch(e) {
// anything
}
Однак краще, якщо ви використовуєте іншу бібліотеку або реалізуєте власну функцію, find
функцію в цьому випадку, тож ваш код є найвищим рівнем.
Як свідчать інші відповіді, Angular не забезпечує цю функціональність. jQuery, однак, і якщо ви завантажили jQuery так само, як і Angular, ви можете використовувати
jQuery.each ( array, function ( index, value) {
if(condition) return false; // this will cause a break in the iteration
})
Дивіться http://api.jquery.com/jquery.each/
Зазвичай немає можливості розбити цикл "кожного" в JavaScript. Що зазвичай можна зробити - це використовувати метод "короткого замикання".
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
Неможливо досягти в кутовому дляEach, нам потрібно модифікувати forEach для цього.
$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()
потрібно це визначати чи тим, що це вже частина кутового. Будь ласка, визначте, якщо ні.
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;
});
}
Я вважаю за краще зробити це поверненням. Покладіть петельну частину в приватну функцію і поверніться, коли ви хочете зламати цикл.
Я розумію, що це старе, але фільтр масиву може робити все, що вам потрібно:
var arr = [0, 1, 2].filter(function (count) {
return count < 1;
});
Потім можна запустити arr.forEach
й інші функції масиву.
Я усвідомлюю, що якщо ви збираєтесь повністю скоротити операції циклу, це, ймовірно, не зробить те, що ви хочете. Для цього найкраще використовувати while
.
Цей приклад працює. Спробуй це.
var array = [0,1,2];
for( var i = 0, ii = array.length; i < ii; i++){
if(i === 1){
break;
}
}
for
циклу, його випадки використання потрібні foreach
не for
певно
Використовуйте Return, щоб перервати цикл.
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;
}
}
Я б використав return
замість цього break
.
angular.forEach([0,1,2], function(count){
if(count == 1){
return;
}
});
Працює як шарм.
Просто додайте $ index і виконайте наступне:
angular.forEach([0,1,2], function(count, $index) {
if($index !== 1) {
// do stuff
}
}