2015-10-23 14 views
5
function(){ 
    _.forEach(listOfSomething, function (something) { 
     if(someCondition){ 
     return false 
     } 
    }); 
    return true; 
} 

अंदर वक्तव्य काफी सरल लगता है - अगर यह समारोह से बाहर किसी भी आइटम निकास के लिए पूरा नहीं होता है, कुछ हालत के लिए प्रत्येक आइटम की जाँच करें और झूठी वापस जाने के लिए कोशिश कर रहा। जब बाहर निकलने के बिना लूप किया जाता है, तो सच वापस आते हैं।समारोह से बाहर "द रिटर्न", Lodash foreach()

हमेशा सत्य देता है, कंसोल लॉगिंग करने का प्रयास किया जाता है, और यह "वापसी झूठी" बिंदु पर हिट करता है।

क्या मुझे कुछ स्पष्ट याद आ रहा है कि जेएस कैसे काम करता है या यह एक सुखद चीज़ है?

+0

आपके यहां दो कार्य हैं। प्रत्येक कथन के अंदर "वापसी झूठी" आंतरिक कार्य को प्रभावित करती है न कि बाहरी कार्य। –

उत्तर

6

आप जो खो रहे हैं वह यह है कि आपका return false कथन आपके return true कथन से भिन्न फ़ंक्शन के अंदर है। आप शायद any/some जैसे विभिन्न लॉनाश विधि का उपयोग करना चाहते हैं।

function(){ 
    return _.some(listOfSomething, function (something) { 
     return someCondition; 
    }); 
} 
+1

आह, सामान्य ज्ञान की चीजें जिन्हें मैं किसी भी तरह याद करता हूं, धन्यवाद, टाइमर की समयसीमा समाप्त होने पर उत्तर स्वीकार करेगा। – VSO

+1

"चेक करता है अगर संग्रह के किसी भी तत्व के लिए सच्चाई देता है। फ़ंक्शन जैसे ही यह गुजरता हुआ मूल्य प्राप्त करता है और पूरे संग्रह पर पुन: सक्रिय नहीं होता है।" https://lodash.com/docs#some –

+0

धन्यवाद, मुझे इसे पढ़ना चाहिए था, लेकिन मैंने एक धारणा की। – VSO

2

Thats क्योंकि 2 कार्य हैं, दूसरे फ़ंक्शन की वापसी पहली फ़ंक्शन वापसी नहीं करेगी। आप एक चर के रूप में सही सेट और झूठे बदल देते हैं तो स्थिति उत्पन्न होने पर करना चाहिए:

function(){ 
    var condition = true; 
    _.forEach(listOfSomething, function (something) { 
     if(someCondition){ 
     condition = false; 
     return; 
     } 
    }); 
    return condition; 
} 
+0

धन्यवाद, मुझे लगता है कि मैंने इस तथ्य को याद किया कि प्रत्येक() के लिए "_" ऑब्जेक्ट की विधि है। नोब नोब जाएगा। – VSO

+0

बात यह है कि आप जो भी समझते हैं उससे लूप से तोड़ना चाहते हैं और मुझे यकीन नहीं है कि अगर आप झूठी वापसी कर रहे हैं तो आप इसे तोड़ देंगे (अपने दस्तावेज़ों को जांचना होगा) –

+0

मैं तोड़ना चाहता हूं लूप का, लेकिन ऐसा प्रतीत नहीं होता है कि लॉनाश प्रत्येक के लिए "ब्रेक" कथन का समर्थन करता है (या लूप के लिए जावास्क्रिप्ट, केवल स्विच कथन में)। – VSO

1

यह का शीघ्रता से अवलोकन लेते हुए "द रिटर्न" सिर्फ भीतरी समारोह है कि हर एक के लिए एक बार निष्पादित किया जाता है से अवास्तविक लौटाते हैं सूची का तत्व (प्रत्येक के माध्यम से), बाहरी फ़ंक्शन से बाहर नहीं निकलें

वास्तव में, मुझे लगता है कि प्रत्येक के लिए निष्पादन जारी रहेगा (इसके अर्थशास्त्र के बारे में निश्चित नहीं है, शायद यह फ़ंक्शन से "झूठा" परिणाम ढूंढता है लूप को तोड़ने के लिए कॉल)

लेकिन किसी भी चर को सही करने के लिए परिणाम कहा जाता है और यदि इसे गलत पर सेट किया जाता है, तो अंत में एक रेटू होता है आरएन परिणाम

जो काम करना चाहिए, लेकिन आपको इसके बारे में दस्तावेज़ों को देखना चाहिए कि वास्तव में "वापसी झूठी" करने से लूप तोड़ जाएगा, या अगर ऐसा करने के लिए कुछ ब्रेक या समान कमांड है (शायद _.break(); लेकिन मुझे यकीन नहीं है कि "_" उदाहरण क्या है)

+1

"_" सिर्फ लॉनाश है, अंडरस्कोर जेएस जैसी लाइब्रेरी जो सरणी के साथ काम करने के तरीकों को प्रदान करती है। – VSO

+0

टिप के लिए धन्यवाद, इससे पहले नहीं सुना था। वास्तव में अन्य उत्तर बिंदुओं के रूप में, \ _ कुछ को चाल करना चाहिए। –

संबंधित मुद्दे