ฉันมีวง 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
วนซ้ำไม่ตรงกับเงื่อนไข
คำแนะนำส่วนตัวของฉันคือการใช้พื้นเมืองสำหรับangular.forEach
ห่วงแทน
NATIVE FOR loop เร็วขึ้นประมาณ90% และ loop อื่น ๆ
ใช้สำหรับวงใน 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.');
}
กรุณาใช้บางกรณีหรือทุกกรณีของ 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
});
มีอยู่จะกลับมาจริงและคุณสามารถใช้สิ่งนี้เป็นตัวแปรในการทำงานของคุณ
if(exists){
console.log('this is true!')
}
angular.forEach()
เป็นที่ฉันได้ให้การสนับสนุน IE8 ซึ่งไม่ได้Array.forEach()
... Array.some()
หรือ
เท่าที่ฉันรู้ Angular ไม่ได้มีฟังก์ชั่นดังกล่าว คุณอาจต้องการใช้find()
ฟังก์ชันขีดล่างสำหรับสิ่งนี้ (โดยทั่วไปแล้วจะเป็น forEach ซึ่งแยกออกจากลูปเมื่อฟังก์ชันส่งคืนค่าจริง)
หากคุณใช้ 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 นั้นไม่ได้เลวร้ายทั้งMDNและArray.everyฟังก์ชั่นพื้นเมืองได้รับการแนะนำโดย MDN เนื่องจากคุณสามารถอ่านได้ที่ native 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.forEach([0,1,2], function(count){
if(count == 1){
return true;
}
});
ในฐานะที่เป็นคำตอบอื่น ๆ Angular ไม่ได้มีฟังก์ชันนี้ อย่างไรก็ตาม jQuery ทำและถ้าคุณโหลด jQuery รวมถึง Angular คุณสามารถใช้
jQuery.each ( array, function ( index, value) {
if(condition) return false; // this will cause a break in the iteration
})
โดยปกติแล้วจะไม่มีทางแยกลูป "แต่ละ" ในจาวาสคริปต์ สิ่งที่สามารถทำได้คือการใช้วิธี "ลัดวงจร"
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
เป็นไปไม่ได้ที่จะประสบความสำเร็จในเชิงมุมสำหรับแต่ละเราจำเป็นต้องแก้ไขให้แต่ละคนทำเช่นนั้น
$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 count = 0;
var arr = [0,1,2];
for(var i in arr){
if(count == 1) break;
//console.log(arr[i]);
}
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
}
}