আমার একটি কৌণিক ফোরচ লুপ রয়েছে এবং আমি কোনও মানটির সাথে মিলে লুপ থেকে ব্রেক করতে চাই। নিম্নলিখিত কোডটি কাজ করে না।
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/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 প্রায় 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.');
}
দয়া করে ফরইচ এর কয়েকটি বা প্রতিটি উদাহরণ ব্যবহার করুন,
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()
হ'ল আমাকে আইই 8 সমর্থন করতে হবে, যার নেই Array.forEach()
... বা Array.some()
।
যতদূর আমি জানি, কৌণিক এই জাতীয় ফাংশন সরবরাহ করে না। আপনি find()
এটির জন্য আন্ডারস্কোরের ফাংশনটি ব্যবহার করতে চাইতে পারেন (এটি মূলত একটি forEach যা ফাংশনটি সত্য হয়ে গেলে লুপটি ভেঙে যায়)।
যদি আপনি অ্যাংুলারজেএস এর সাথে মিলিয়ে 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 লুপ থামাতে বা ভাঙ্গার কোনও উপায় নেই। সমাধানটি অ্যারে.এভারি বা অ্যারে.সোম ব্যবহার করা হয়"
নিম্নলিখিত উদাহরণগুলি এমডিএন সরবরাহ করেছে:
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
এই ক্ষেত্রে একটি ফাংশন ব্যবহার করেন তবে এটি আরও ভাল ।
অন্যান্য উত্তরগুলি যেমন বলেছে, কৌণিক এই কার্যকারিতা সরবরাহ করে না। jQuery তবে করে, এবং আপনি যদি jQuery এর পাশাপাশি অ্যাংুলার লোড করেছেন তবে আপনি এটি ব্যবহার করতে পারেন
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 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
লুপটি ভাঙ্গতে রিটার্নটি ব্যবহার করুন।
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;
}
});
একটি যাদুমন্ত্র মত কাজ করে.
কেবলমাত্র $ সূচক যুক্ত করুন এবং নিম্নলিখিতগুলি করুন:
angular.forEach([0,1,2], function(count, $index) {
if($index !== 1) {
// do stuff
}
}