2016-06-24 4 views
14

मैंने हाल ही में es6 पर स्विच किया और मेरे कोड पर तीर फ़ंक्शंस का उपयोग करना शुरू कर दिया। रिफैक्टरिंग जब मैं कोडजावास्क्रिप्ट में एक लाइनर तीर फ़ंक्शन से अज्ञात ऑब्जेक्ट को कैसे वापस करें?

data.map(function(d) { 
    return {id: d.id, selected: bool}; 
}); 

नीचे में आए मैं इस के लिए कोड ऊपर बदल -

data.map((d) => {id: d.id, selected: bool}); 

लेकिन मैं कोड ऊपर से त्रुटि हो रही थी। मुझे नहीं पता कि यहाँ क्या गलत है? मुझे पता है कि यदि कोड का कोई ब्लॉक नहीं है तो तीर फ़ंक्शन द्वारा प्रदान की गई निहित वापसी होती है।

लेकिन कुछ संपत्तियों के साथ खाली ऑब्जेक्ट या अज्ञात ऑब्जेक्ट को वापस कैसे करें, यह नहीं पता?

संपादित करें:

इस तरह से क्या गलत है अगर मैं इसे करते हैं? जिज्ञासा के लिए बस।

data.map((d) => new {id: d.id, selected: bool}); 
+2

यहां एक दिलचस्प थोड़ा सा पढ़ा गया है जो मैंने इस विषय का अध्ययन करते समय पाया है https://rainsoft.io/when-not-to-use-arrow-functions-in-javascript/ (विशेष रूप से अंक 2 और 4) – cregox

उत्तर

27

रखें ऑब्जेक्ट प्रारंभकर्ता आसपास कोष्ठक:

data.map((d) => ({id: d.id, selected: bool})); 

कोष्ठक उन्हें अंदर अभिव्यक्ति के मूल्य पर कोई प्रभाव नहीं है, लेकिन वे पहले की अस्पष्टता को नष्ट करने की वाक्यात्मक प्रभाव है निहित अभिव्यक्ति का टोकन। कोष्ठक के बिना, जावास्क्रिप्ट पार्सर को यह तय करना है कि { टोकन का अर्थ है "यहां एक फ़ंक्शन बॉडी शुरू होता है" या "यहां ऑब्जेक्ट प्रारंभकर्ता शुरू होता है।" यह हमेशा पूर्व (यानी, कोड का एक ब्लॉक) चुनता है।

कोष्ठकों का परिचय है, इसलिए, समाप्त भ्रम: केवल बात यह है कि एक प्रमुख ( मतलब हो सकता है "यहाँ एक अभिव्यक्ति आता है" है, ताकि { अंदर कोष्ठक केवल किया जा सकता है "यहाँ एक ऑब्जेक्ट प्रारंभकर्ता आता है।" (आप अभिव्यक्ति के बीच में कोड का एक ब्लॉक नहीं छोड़ सकते हैं, दूसरे शब्दों में; यदि आप कोशिश करते हैं, तो आपको एक वाक्यविन्यास त्रुटि मिल जाएगी।)

+2

क्या आप कृपया संपादित भाग भी समझाओ? – WitVault

+1

@WitVault 'new' का उपयोग करना गलत है क्योंकि' नया 'केवल तब काम करता है जब उसके बाद क्या होता है फ़ंक्शन का संदर्भ होता है। यदि आपने कोशिश की है, तो आपको एक त्रुटि भी मिल जाएगी। – Pointy

+1

आप सही हैं मुझे त्रुटि मिली है। लेकिन बस समझना चाहता था कि क्या हो रहा है। – WitVault

1

हाय मुझे लगता है कि आपको वस्तु को वापस करने के लिए पैराथेसिस जोड़ने की आवश्यकता है शाब्दिक

// बीच में लिखना एक वस्तु शाब्दिक अभिव्यक्ति वापस जाने के लिए शरीर: पैरामीटर =>: से https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions

0

({foo बार})

तुम भी उपयोग कर सकते हैं

data.map((d) => { 
    return {id: d.id, selected: bool} 
}); 
संबंधित मुद्दे