एक क्रम के लिए पायथन 'गणना' के बराबर ES6 क्या है?


105

पायथन में एक अंतर्निहित फ़ंक्शन हैenumerate , जो (index, item)जोड़े के चलने योग्य है ।

ES6 एक सरणी के लिए एक बराबर है? यह क्या है?

def elements_with_index(elements):
    modified_elements = []
    for i, element in enumerate(elements):
         modified_elements.append("%d:%s" % (i, element))
    return modified_elements

print(elements_with_index(["a","b"]))
#['0:a', '1:b']

ES6 बिना समकक्ष enumerate:

function elements_with_index(elements){
     return elements.map(element => elements.indexOf(element) + ':' + element);
 }

console.log(elements_with_index(['a','b']))
//[ '0:a', '1:b' ]

लेकिन नक्शा या पहले से ही ऐसा करें, दोनों तत्व और सूचकांक प्राप्त कर सकते हैं
रसियन

जैसा @ अंजुएन कहता है, नक्शे में उपलब्ध सूचकांक का उपयोग क्यों नहीं किया गया? elements.map(( element, i ) => `${ i }:${ element }`);
जेम्स एलारडाइस

@JamesAllardice mozilla से डॉक्टर के साथ:elements.map((element,index) => index + ':' + element)
विंसेंट

जवाबों:


112

हाँ वहाँ है, बाहर की जाँच करें Array.prototype.entries()

const foobar = ['A', 'B', 'C'];

for (const [index, element] of foobar.entries()) {
  console.log(index, element);
}


4
यह, इतना सरल, इतना ठंडा। यह अजगर के करीब enumerateहै [].map(), यह एक पुनरावृत्त लौटाता है।
शनूर

3
यह मानचित्र ((el, idx) => ..) का उपयोग करने के बराबर नहीं है, क्योंकि हो सकता है कि आप प्रदर्शन करना चाहते हों, filterलेकिन फ़िल्टर करने से पहले आपके पास जो अनुक्रमणिका थी, उसे रखें।
derekdreery

31

Array.prototype.mapपहले से ही आपको कॉलबैक प्रक्रिया के दूसरे तर्क के रूप में सूचकांक देता है ... और यह लगभग हर जगह समर्थित है।

['a','b'].map(function(element, index) { return index + ':' + element; });
//=> ["0:a", "1:b"]

मुझे ईएस 6 भी पसंद है

['a','b'].map((e,i) => `${i}:${e}`)
//=> ["0:a", "1:b"]

2
यह imo से बेहतर हैentries()
StephenBoesch


6

माफ करना, अगर मैं अज्ञानी हूं (यहां एक नौसिखिया से जावास्क्रिप्ट तक), लेकिन क्या आप सिर्फ उपयोग नहीं कर सकते forEach? उदाहरण के लिए:

function withIndex(elements) {
    var results = [];
    elements.forEach(function(e, ind) {
        results.push(`${e}:${ind}`);
    });
    return results;
}

alert(withIndex(['a', 'b']));

वहाँ भी naomik का जवाब है जो इस विशेष उपयोग के मामले के लिए एक बेहतर फिट है, लेकिन मैं सिर्फ यह बताना चाहता था कि forEachयह बिल भी फिट बैठता है।

ES5 + समर्थित।


5

pythonicएक enumerateफ़ंक्शन प्रदान करता है जो सभी पुनरावृत्तियों पर काम करता है, न कि केवल सरणियाँ, और एक आयेटर लौटाता है , जैसे कि अजगर:

import {enumerate} from 'pythonic';

const arr = ['a', 'b'];
for (const [index, value] of enumerate(arr))
    console.log(`index: ${index}, value: ${value}`);
// index: 0, value: a
// index: 1, value: b

प्रकटीकरण मैं लेखक और Pythonic का अनुचर हूँ


4
कृपया उल्लेख करें कि आप विकसित करने में मदद करते हैं pythonic। स्टैक ओवरफ्लो के सहायता केंद्र में कैसे एक स्पैमर नहीं हो सकता है, के अनुसार , "यहां समुदाय ने ओवर-प्रमोशन को वोट देने और इसे स्पैम के रूप में चिह्नित करने के लिए किया है। पोस्ट को अच्छे, प्रासंगिक उत्तर और यदि कुछ (लेकिन सभी नहीं) के बारे में होना चाहिए। आपका उत्पाद या वेबसाइट, यह ठीक है। हालांकि, आपको अपने उत्तरों में अपनी संबद्धता का खुलासा करना होगा। "
सोलोमन उको

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

आपके अनुरोध के अनुसार जोड़ा गया
कीवान

2

के रूप में Kyleऔर Shanoorकहना है कि Array.prototype.entries () है

लेकिन मेरे जैसे नौसिखियों के लिए, इसके अर्थ को पूरी तरह से समझना कठिन है।

तो यहाँ एक समझने योग्य उदाहरण दें:

for(let curIndexValueList of someArray.entries()){
  console.log("curIndexValueList=", curIndexValueList)
  let curIndex = curIndexValueList[0]
  let curValue = curIndexValueList[1]
  console.log("curIndex=", curIndex, ", curValue=", curValue)
}

pythonकोड के बराबर :

for curIndex, curValue in enumerate(someArray):
  print("curIndex=%s, curValue=%s" % (curIndex, curValue))
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.