2015-12-18 3 views
82

हम का उपयोग कर एक पाश के लिए-की सरणी तत्वों का उपयोग कर सकते हैं:ES6 सरणी तत्व सूचकांक के अंदर तक पहुंच के लिए-पाश

for (const j of [1, 2, 3, 4, 5]) { 
    console.log(j); 
} 

मैं इस कोड कैसे संशोधित कर सकते हैं भी वर्तमान सूचकांक का उपयोग करने की? मैं सिंटैक्स के लिए इसका उपयोग करना चाहता हूं, न तो प्रत्येक के लिए और न ही इनके लिए।

उत्तर

89

उपयोग Array.prototype.keys:

for (const index of [1, 2, 3, 4, 5].keys()) { 
 
    console.log(index); 
 
}

तुम दोनों कुंजी और मान उपयोग करना चाहते हैं, तो आप उपयोग कर सकते हैं Array.prototype.entries()destructuring साथ:

for (const [index, value] of [1, 2, 3, 4, 5].entries()) { 
 
    console.log(index, value); 
 
}

+16

किसी के आश्चर्य के मामले में, मैंने '.entries()' के साथ 'के लिए' का परीक्षण किया और यह'forEach() 'की तुलना में धीमी गति से दो गुना है। https://jsperf.com/for-of-vs-foreach-with-index – K48

+0

@ K48 जानना अच्छा है, अगर आप सबसे तेज़ होना चाहते हैं तो "रिवर्स फॉर-लूप" का उपयोग करें: https: //www.incredible -web.com/blog/performance-of-for-loops-with-javascript/ – nimo23

+0

दुर्भाग्य से, मुझे नेस्टेड लूप के अंदर से उपज करने की आवश्यकता है। प्रत्येक के लिए उपयोग नहीं कर सकता, क्योंकि फ़ंक्शन 'उपज' कीवर्ड के लिए स्कोप समस्याएं उत्पन्न करता है। लेकिन मुझे अपने उपयोग के मामले में इंडेक्स तक पहुंच की आवश्यकता है, इसलिए ... मूल पुराना ';' लूप यह है, मुझे लगता है। –

189

Array#entries, सूचकांक और मान देता है अगर तुम दोनों की जरूरत है:

for (let [index, value] of array.entries()) { 

} 
+0

टाइपस्क्रिप्ट के साथ: 'टीएस 24 9 5: टाइप IterableIterator एक सरणी प्रकार या स्ट्रिंग प्रकार नहीं है'। ऐसा लगता है कि इसे हल किया जाएगा: https://github.com/Microsoft/TypeScript/pull/12346 – Johannes

+2

इंटरनेट एक्सप्लोरर भी समर्थित नहीं है। – Sammi

+0

अच्छा! यह 'const' के साथ भी काम करता प्रतीत होता है। – Eliot

1
HTML/JS संदर्भ में

, आधुनिक ब्राउज़रों पर, सरणी के अलावा अन्य iterable वस्तुओं हम भी [Iterable] .entries इस्तेमाल कर सकते हैं के साथ() :

for(let [index, element] of document.querySelectorAll('div').entries()) { 

    element.innerHTML = '#' + index 

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