पिछले पुनरावृत्ति पकड़ लो


97
arr = [1,2,3];
arr.forEach(function(i){
// last iteration
});

लूप समाप्त होने पर कैसे पकड़ें? मैं कर सकता हूँ, if(i == 3)लेकिन मुझे नहीं पता कि मेरे सरणी की संख्या क्या है।

जवाबों:


179

ES6 + के लिए अद्यतित उत्तर यहाँ है


arr = [1, 2, 3]; 

arr.forEach(function(i, idx, array){
   if (idx === array.length - 1){ 
       console.log("Last callback call at index " + idx + " with value " + i ); 
   }
});

उत्पादन होगा:

Last callback call at index 2 with value 3

जिस तरह से यह काम करता है arr.length, सरणी के वर्तमान सूचकांक के खिलाफ परीक्षण कर रहा है, कॉलबैक फ़ंक्शन को पास किया गया ।


मैं इसके पीछे हो सकता हूं, यह थोड़ा और स्पष्ट है, हालांकि मुझे यकीन नहीं है कि यह वास्तव में किसी और चीज की गारंटी देता है, क्योंकि arrपहले से ही प्रत्येक कॉलबैक के लिए बंद होने की गुंजाइश है
jdphenix

और तुरंत पोस्ट करने पर कि मुझे एक स्पष्ट उपयोग के मामले का एहसास हुआ - यदि आपने कॉलबैक को कहीं और परिभाषित किया था। शर्मिंदा चेहरा डालें।
jdphenix

किसी शर्मिंदा चेहरे की जरूरत नहीं। मेरे पास वह सटीक प्रश्न था (गिरफ्तारी के समय आपको सरणी की आवश्यकता क्यों है), लेकिन आपके अवलोकन / प्रश्न ने साफ़ कर दिया है, इसलिए धन्यवाद। हालाँकि यह अजीब है कि आपने स्वयं उस उत्तर को लिखा है, और आप अपने स्वयं के उत्तर पर सवाल उठाते हैं? क्या अन्य टिप्पणियां हैं जो आप जवाब दे रहे थे कि अब शायद हटा दी गई हैं?
redfox05

@ रसेल यह सही है, एक चर्चा है जो तब से आंशिक रूप से हटा दी गई है।
jdphenix

33

2018 ES6 + ANSWER IS :

    const arr = [1, 2, 3];

    arr.forEach((val, key, arr) => {
      if (Object.is(arr.length - 1, key)) {
        // execute last item logic
        console.log(`Last callback call at index ${key} with value ${val}` ); 
      }
    });

1
मत भूलो, कि कास्ट और वैश्विक घोषणाएं नहीं हैं, क्योंकि वे केवल तत्काल दायरे में मान्य हैं ... var के विपरीत, जो विधि के शीर्ष पर फहराया जाता है।
स्टर्लिंग बॉर्न

1
हुह ... पिछला संस्करण बहुत अधिक संक्षिप्त और पठनीय है। यह ऑब्जेक्ट सामान गड़बड़ है।
जियोर्जियो79

2
यह केवल एक गड़बड़ है यदि आप इसे जियोर्जियो79 नहीं समझते हैं। आपके बनाम बनाम == या === की प्राथमिक विधि के रूप में Object.is () का उपयोग करने के कई लाभ हैं। आपकी टिप्पणी के लिए धन्यवाद, हालांकि!
स्टर्लिंग बॉर्न

3
@SterlingBourne क्या आप आगे बता सकते हैं कि वे लाभ क्या हैं? (उत्तर में इसे भी शामिल करना अच्छा होगा)
ludovico

1
Object.isकुछ के रूप में सरल के रूप में दो पूर्णांक somparing के लिए उपयोग करना (जो -0 या NaN भी नहीं हो सकता है) सबसे निश्चित रूप से गड़बड़ है। मुझे बताओ, @SterlingBourne, क्या लाभ हैं?
Gust van de Wal

4
const arr= [1, 2, 3]
arr.forEach(function(element){
 if(arr[arr.length-1] === element){
  console.log("Last Element")
 }
})

4
हमेशा काम नहीं हो सकता। let o = { val:"ue" } ; let arr = [ o, 1, o ]; ...दुर्भाग्य से पहली पुनरावृत्ति होगीarr[arr.length-1] === element
e2-e4
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.