角度のあるforeachループがあり、値が一致した場合にループから抜け出したいと思います。次のコードは機能しません。
angular.forEach([0,1,2], function(count){
if(count == 1){
break;
}
});
どうすれば入手できますか?
角度のあるforeachループがあり、値が一致した場合にループから抜け出したいと思います。次のコードは機能しません。
angular.forEach([0,1,2], function(count){
if(count == 1){
break;
}
});
どうすれば入手できますか?
回答:
これを行う方法はありません。https://github.com/angular/angular.js/issues/263を参照してください。実行していることに応じて、ブール値を使用してループの本体に入らないようにすることができます。何かのようなもの:
var keepGoing = true;
angular.forEach([0,1,2], function(count){
if(keepGoing) {
if(count == 1){
keepGoing = false;
}
}
});
!keepGoing && return;
関数の先頭にを追加するだけで、コードは少なくなります。
angular.forEach
ループは、条件一致でブレークすることはできません。
私の個人的なアドバイスは、の代わりにNATIVE FORループを使用することですangular.forEach
。
NATIVE FORループは、他のforループよりも約90%高速です。
角度でのFORループの使用:
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/
Array someメソッドを使用する
var exists = [0,1,2].some(function(count){
return count == 1
});
existsはtrueを返し、これを関数の変数として使用できます
if(exists){
console.log('this is true!')
}
angular.forEach()
は、IEをサポートする必要があることです。IE8はArray.forEach()
...またはをサポートしていませんArray.some()
。
私の知る限り、Angularはそのような関数を提供していません。find()
これにはアンダースコアの関数を使用することをお勧めします(基本的には、関数がtrueを返すとループから抜け出すforEachです)。
AngularJSと組み合わせてjQuery(したがってjqLiteではない)を使用する場合は、$。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の使用は悪くありませんが、ネイティブのforEachドキュメントで読むことができるように、MDN ではネイティブのArray.some関数またはArray.every関数の両方を推奨しています。
「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
})
break
角度のforEachで達成することは不可能です。そのためには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)
}
}
});
});
この例は機能します。それを試してみてください。
var array = [0,1,2];
for( var i = 0, ii = array.length; i < ii; i++){
if(i === 1){
break;
}
}
for
ループを望んでいないと思います、彼のユースケースはおそらく必要ではありforeach
ませんfor
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
}
}