एक PrototypeJS चाहते प्रत्येक से बाहर तोड़कर () पाश

वोट
16

यह बहुत ही काल्पनिक उदाहरण में, मैं 3 तत्वों है कि मैं का उपयोग करने पर पाशन कर रहा हूँ के साथ एक सरणी है .प्रत्येक () विधि।

 var vals = $w('foo bar baz'); 

 vals.each( function(val) {
    alert(val);

    if( val == 'bar' ) {
        //This exits function(val)
        //but still continues with the .each()
        return;
    }
  });

मैं आसानी से समारोह से बाहर लौट सकते हैं द्वारा बुलाया जा रहा है .प्रत्येक () अगर मैं की जरूरत है।

मेरे सवाल है, मैं कैसे समारोह है कि .प्रत्येक () बुला रहा है अंदर से .प्रत्येक () लूप के बाहर तोड़ सकते हैं?

25/06/2009 को 17:21
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


4 जवाब

वोट
32

if( val == 'bar' ) {
    throw $break;
}

यह एक ही पृष्ठ आप लिंक पर दस्तावेज़ीकरण किया गया है। यह एक अपवाद विशेष रूप से प्रत्येक कार्य के द्वारा नियंत्रित है। जब फेंक दिया, यह आगे तत्वों पर बुलाया जा रहा से अपने कार्य को रोकता है।

25/06/2009 को 17:25
का स्रोत उपयोगकर्ता

वोट
7

आपका सही हैं, और प्रोटोटाइप एक वस्तु (पैदा कर दी है $ तोड़ ) कि प्रत्येक कार्य से फेंकी जा सकती है इस कार्यप्रणाली को सक्षम करने। प्रोटोटाइप एपीआई डॉक्स के अनुसार:

नियमित रूप से छोरों शॉर्ट सर्किट तोड़ने का उपयोग करने और बयान जारी रखने के लिए जावास्क्रिप्ट में हो सकता है। हालांकि, जब इटरेटर कार्यों का उपयोग कर, अपने कोड पाश दायरे के बाहर है: पाशन कोड दृश्य के पीछे होता है।

आदेश बराबर (यद्यपि कम इष्टतम) कार्यक्षमता के साथ आप प्रदान करने के लिए, प्रोटोटाइप दो वैश्विक अपवाद वस्तुओं, $ ब्रेक और $ जारी रखने के लिए प्रदान करता है। इन फेंकने एक वेनिला पाश में इसी देशी कथन का उपयोग करने के लिए बराबर है। ये अपवाद ठीक से प्रत्येक विधि द्वारा आंतरिक रूप से फंस गए हैं।

इसके अलावा, ध्यान दें कि $ वस्तु पदावनत किया गया है जारी है, और एक अनुकरण करने के लिए जारी रखने के लिए , -statement बजाय एक वेनिला वापसी कथन का उपयोग करें।

कोड उदाहरण:

var result = [];
$R(1,10).each(function(n) {
  if (0 == n % 2)
    return; // this equals continue
  if (n > 6)
    throw $break;
  result.push(n);
});
// result -> [1, 3, 5]

आप यहाँ प्रत्येक कार्य के बारे में अधिक पढ़ सकते हैं: http://www.prototypejs.org/api/enumerable/each

25/06/2009 को 17:26
का स्रोत उपयोगकर्ता

वोट
2

प्रलेखन पर के लिए आधार .each()है कि आप से जुड़ा हुआ है, तो आप एक का उपयोग करना चाहिए throw $break;बयान, इस आगे पुनरावृत्तियों बंद करने का कारण होना चाहिए।

सीधे शब्दों में इटरेटर अगले एक करने के लिए जारी रखने के लिए कारण होगा लौटने।

25/06/2009 को 17:26
का स्रोत उपयोगकर्ता

वोट
2

उस पृष्ठ से लिंक से, सही तरीका नहीं है

 if(val == 'bar')
 {
    throw $break;
 }

?

25/06/2009 को 17:26
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more