दिलचस्प पोस्ट
ListView में एकाधिक आइटम का चयन करना आईओएस – अलग आकार के दो चित्रों को मिलाकर एक HTML फार्म में एकाधिक सबमिट बटन प्राकृतिक क्रम क्रम सी # इनपुट मिस्मैचएक्साशन के साथ प्रयास करें / पकड़ें अनंत लूप बनाता है सी में चारों की एक स्ट्रिंग को संशोधित करना संभव है? जर्सी के साथ जेएक्स-आरएस का उपयोग कर कॉरस को कैसे संभालना है ड्रॉप डाउन तीर का रंग और रूप बदलें एसवीजी तत्व के साथ काम नहीं कर रहा है jquery? पॉको बनाम डीटीओ क्या स्वचालित रूप से रिक्त स्थान और टैब के बीच स्विच हो सकता है? jQuery .live () बनाम .on () गतिशील HTML को लोड करने के बाद क्लिक ईवेंट को जोड़ने के लिए विधि क्रोम एक्सटेंशन पॉपअप काम नहीं कर रहा है, ईवेंट को संभाला नहीं है पर क्लिक करें सभी पृष्ठों के लिए आम तौर पर लेआउट के लिए डेटा पास करें पूर्णांक आवरण वस्तु केवल वही उदाहरण साझा करती है, जो कि 127 के भीतर ही होती है?

कैसे जावास्क्रिप्ट को रोकने के लिए हर?

मैं नोडज और मोंगोज़ के साथ खेल रहा हूं – गहरी टिप्पणियों में विशिष्ट टिप्पणी को खोजने के लिए कोशिश कर रहा हूँ जिसमें पुनरावृत्त func और foreach के साथ घोंसले के शिकार हैं। क्या हर एक के लिए नोडज को रोकने का एक तरीका है? जैसा कि मैं प्रत्येक के लिए प्रत्येक समझना एक चलन है एक समारोह है और मैं सिर्फ "तोड़" नहीं कर सकता, केवल "वापसी" लेकिन यह foreach बंद नहीं होगा

function recurs(comment){ comment.comments.forEach(function(elem){ recurs(elem); //if(...) break; }); } 

वेब के समाधान से एकत्रित समाधान "कैसे जावास्क्रिप्ट को रोकने के लिए हर?"

आप एक के लिए नहीं तोड़ सकते हैं हर forEach मैं नकली करने के तीन तरीकों के बारे में सोच सकता हूं, यद्यपि।

1. अजीब रास्ता : संदर्भ के रूप में उपयोग करने के लिए एक दूसरा तर्क देता है, और वहां एक बुलियन संग्रहीत करता है, फिर एक का उपयोग करें यह भयानक लग रहा है

2. विवादास्पद तरीके : एक try-catch ब्लॉक में पूरी चीज को घेर लें और जब आप टूटना चाहते हैं तो अपवाद फेंकें यह बहुत बुरा लग रहा है और प्रदर्शन को प्रभावित कर सकता है, लेकिन इसे समझाया जा सकता है।

3. मजेदार तरीका : every() उपयोग करें every()

 ['a', 'b', 'c'].every(function(element, index) { // Do your thing, then: if (you_want_to_break) return false else return true }) 

आप इसके बजाय some() उपयोग कर सकते हैं, अगर आप को तोड़ने के लिए return true करनी चाहिए।

Array # के बाहर तोड़ना संभव नहीं है। (आप इस बात की पुष्टि करने के लिए लिंक किए गए पृष्ठ पर फ़ायरफ़ॉक्स में इसका उपयोग करने वाले स्रोत कोड का निरीक्षण कर सकते हैं।)

इसके बजाय आपको लूप के for सामान्य का उपयोग करना चाहिए:

 function recurs(comment) { for (var i = 0; i < comment.comments.length; ++i) { var subComment = comment.comments[i]; recurs(subComment); if (...) { break; } } } 

(या, यदि आप इसके बारे में थोड़ा अधिक चालाक बनना चाहते हैं और comment.comments[i] हमेशा एक वस्तु है 🙂

 function recurs(comment) { for (var i = 0, subComment; subComment = comment.comments[i]; ++i) { recurs(subComment); if (...) { break; } } } 

जैसा कि अन्य ने बताया है, आप forEach पाश को रद्द नहीं कर सकते, लेकिन यहां मेरा समाधान है:

 ary.forEach(function loop(){ if(loop.stop){ return; } if(condition){ loop.stop = true; } }); 

बेशक यह वास्तव में लूप को तोड़ता नहीं है, यह सिर्फ "ब्रेक" के बाद सभी तत्वों पर कोड निष्पादन को रोकता है

कुछ मामलों में Array.some संभवतः आवश्यकताओं को पूरा करेगा।

यदि आप 3 पार्टी लाइब्रेरीज़ का उपयोग करने पर ध्यान नहीं forEach हैं तो आप लोदाश के लिए forEach समारोह का उपयोग कर सकते हैं।

उदाहरण:

 var _ = require('lodash'); _.forEach(comments, function (comment) { do_something_with(comment); if (...) { return false; // Exits the loop. } }) 
  var f = "how to stop Javascript forEach?".split(' '); f.forEach(function (a,b){ console.info(b+1); if (a == 'stop') { console.warn("\tposition: \'stop\'["+(b+1)+"] \r\n\tall length: " + (f.length)); f.length = 0; //<--!!! } }); 

Array.forEach टूटी नहीं जा सकती और try...catch का उपयोग कर try...catch या hacky विधियों जैसे Array.every या Array.some केवल आपके कोड को समझने के लिए कठिन बना देगा। इस समस्या का केवल दो समाधान हैं:

1) लूप के for पुराने का उपयोग करें: यह सबसे संगत समाधान होगा, लेकिन पढ़ने के लिए बहुत मुश्किल हो सकता है जब अक्सर कोड के बड़े ब्लॉक में उपयोग किया जाता है:

 var testArray = ['a', 'b', 'c']; for (var key = 0; key < testArray.length; key++) { var value = testArray[key]; console.log(key); // This is the key; console.log(value); // This is the value; } 

2) उन मामलों में नए ECMA6 (2015 विनिर्देश) का उपयोग करें जहां संगतता कोई समस्या नहीं है। ध्यान दें कि 2016 में, केवल कुछ ब्राउज़रों और आईडीई इस नए विनिर्देश के लिए अच्छा समर्थन प्रदान करते हैं। जबकि यह पुनरावृत्त वस्तुओं (जैसे एरेज़) के लिए काम करता है, यदि आप इसे गैर-पुनरावृत्त वस्तुओं पर उपयोग करना चाहते हैं, तो आपको ऑब्जेक्ट.नेट्स विधि का उपयोग करना होगा। यह विधि 18 जून 2016 तक शायद ही उपलब्ध है और यहां तक ​​कि क्रोम को इसे सक्षम करने के लिए एक विशेष ध्वज की आवश्यकता है: chrome://flags/#enable-javascript-harmony एरे के लिए, आपको इसकी ज़रूरत नहीं होगी, लेकिन संगतता एक समस्या बनी हुई है:

 var testArray = ['a', 'b', 'c']; for (let [key, value] of testArray.entries()) { console.log(key); // This is the key; console.log(value); // This is the value; } 

3) बहुत से लोग सहमत होंगे कि न तो पहला या दूसरा विकल्प अच्छे उम्मीदवार हैं। विकल्प 2 नए मानक बनने तक, एंजरीआरजेएस और जेक्यू जैसे सबसे लोकप्रिय पुस्तकालय अपनी स्वयं की लूप विधियों की पेशकश करता है जो जावास्क्रिप्ट में उपलब्ध किसी भी चीज़ से बेहतर हो सकता है। उन लोगों के लिए जो पहले से ही इन बड़े पुस्तकालयों का उपयोग नहीं कर रहे हैं और जो हल्के विकल्प की तलाश कर रहे हैं, इस तरह के समाधानों का उपयोग किया जा सकता है और पुराने ब्राउज़रों के साथ संगतता रखते हुए लगभग ईसीएमए 6 के बराबर होगा।

मुझे लगता है कि आप ऐरे का उपयोग करना चाहते हैं.प्रोटोटाइप खोजने के लिए खुद को तब टूट जाएगा जब यह आपके विशिष्ट मान को सरणी में पाता है।

 var inventory = [ {name: 'apples', quantity: 2}, {name: 'bananas', quantity: 0}, {name: 'cherries', quantity: 5} ]; function findCherries(fruit) { return fruit.name === 'cherries'; } console.log(inventory.find(findCherries)); // { name: 'cherries', quantity: 5 } 

नीचे दिए गए नियम नीचे दिए गए foreach लूप को तोड़ देगा, नीचे नमूना उदाहरण है

  var array = [1,2,3,4,5]; var newArray = array.slice(0,array.length); array.forEach(function(item,index){ //your breaking condition goes here example checking for value 2 if(item == 2){ array.length = array.indexOf(item); } }) array = newArray; 

के लिए प्रत्येक वापसी पर नहीं तोड़ता है, इस काम को पाने के लिए बदसूरत हल होते हैं लेकिन मैं इसका उपयोग नहीं करने का सुझाव देता हूं, बल्कि Array.prototype.some का प्रयोग करने की कोशिश करता Array.prototype.some या Array.prototype.every

 var ar = [1,2,3,4,5]; ar.some(function(item,index){ if(item == 5){ return; } console.log("item is :"+item+" index is : "+index); }); 

यदि आप अर्रे विधि को अधिलेखित करते हैं तो आप प्रत्येक पाश के लिए तोड़ सकते हैं:

 (function(){ window.broken = false; Array.prototype.forEach = function(cb, thisArg) { var newCb = new Function("with({_break: function(){window.broken = true;}}){("+cb.replace(/break/g, "_break()")+"(arguments[0], arguments[1], arguments[2]));}"); this.some(function(item, index, array){ newCb(item, index, array); return window.broken; }, thisArg); window.broken = false; } }()) 

उदाहरण:

 [1,2,3].forEach("function(x){\ if (x == 2) break;\ console.log(x)\ }") 

दुर्भाग्य से इस समाधान के साथ आप अपने कॉलबैक के अंदर सामान्य ब्रेक का उपयोग नहीं कर सकते हैं, आपको स्ट्रिंग्स में अमान्य कोड लपेट करना चाहिए और मूल फ़ंक्शंस सीधे काम नहीं करते हैं (लेकिन आप इसके आसपास काम कर सकते हैं)

खुश तोड़!

क्या सादे वापसी का उपयोग नहीं?

 function recurs(comment){ comment.comments.forEach(function(elem){ recurs(elem); if(...) return; }); 

यह 'रिकर्स' फ़ंक्शन से लौटाएगा। मैं इसे इस तरह उपयोग करता हूँ Althougth यह हर ईकाई से, लेकिन पूरे समारोह से नहीं टूट जाएगा, इस सरल उदाहरण में यह काम कर सकता है

jQuery each() विधि प्रदान करता है, नहीं के लिए forEach() आप false लौटने के द्वारा each बाहर तोड़ सकते हैं forEach() ECMA-262 मानक का हिस्सा है, और इसके बारे में मुझे पता है कि एक से बाहर तोड़ने का एक तरीका एक अपवाद फेंकने के द्वारा है

 function recurs(comment) { try { comment.comments.forEach(function(elem) { recurs(elem); if (...) throw "done"; }); } catch (e) { if (e != "done") throw e; } } 

बदसूरत, लेकिन काम करता है