मै मैप() के व्यवहार से काफी उलझन में हूं।क्यों सरणी पर एक जेएस नक्शा मूल सरणी को संशोधित करता है?
मैं इस तरह की वस्तुओं की एक सरणी है:
const products = [{
...,
'productType' = 'premium',
...
}, ...]
और मैं एक समारोह है कि एक ही सरणी लौट जाना करने के लिए, लेकिन सभी उत्पाद के साथ इस सरणी गुजर रहा हूँ बना मुक्त:
[{
...,
'productType' = 'free',
...
}, ...]
कार्य है:
const freeProduct = function(products){
return products.map(x => x.productType = "free")
}
जो निम्न सरणी देता है:
["free", "free", ...]
तो मैं अपने समारोह दुबारा लिखा होने के लिए:
const freeProduct = function(products){
return products.map(x => {x.productType = "free"; return x})
}
कौन सा सरणी देता है के रूप में इरादा।
लेकिन! और यही वह क्षण है जहां मैंने अपना दिमाग खोला, दोनों मामलों में मेरे मूल उत्पाद सरणी को संशोधित किया गया है।
मानचित्र के आसपास दस्तावेज़ीकरण() कहता है कि यह नहीं होना चाहिए (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)।
मैं भी इस
const freeProduct = function(products){
p = products.splice()
return p.map(x => {x.productType = "free"; return x})
}
की तरह मेरे समारोह मोड़ मेरी सरणी का क्लोन बनाने की कोशिश की लेकिन मैं अभी भी एक ही परिणाम (जो मुझे पागल ड्राइव करने के लिए शुरू होता है) मिलता है।
मैं किसी के भी बहुत आभारी हूं जो मुझे समझा सकता है कि मैं क्या गलत कर रहा हूं!
धन्यवाद
हाय। उपरोक्त कोड में "=>" का क्या अर्थ है? –
@ हरशाकंचिना ईएस 6 में जोड़ा गया वसा तीर फ़ंक्शन सिंटैक्स है। [यहां] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions#Arrow_functions) एमडीएन पर इसके बारे में कुछ जानकारी है। – SimpleJ
जावास्क्रिप्ट एक कार्यात्मक भाषा होने का नाटक करता है, लेकिन क्लास कीवर्ड की तरह ही, यह भ्रमित, अनजान और बहुत समय बर्बाद कर रहा है। 'आप अपनी मूल सरणी को संशोधित नहीं कर रहे हैं। आप सरणी में ऑब्जेक्ट्स को संशोधित कर रहे हैं '- हालांकि यह उत्तर सही है यह अजीब है क्योंकि असली दुनिया में आप कुछ हिस्सों को नहीं बदल सकते हैं और यह वही रहता है। – Cobolt