मैं सिर्फ जेएस उच्च-आदेश कार्यों (मानचित्र, प्रत्येक के लिए, कम करने, आदि) का उपयोग करने के बारे में सीख रहा हूं, और भ्रम में ठोकर खाई है। मैं एक साधारण 'रेंज' फ़ंक्शन लिखने की कोशिश कर रहा हूं, लेकिन मेरे आउटपुट सरणी को पॉप्युलेट नहीं कर सकता।एक 'नया ऐरे' पर करने के लिए मैं जो कर रहा हूं वह नहीं कर रहा है
range(1, 4) // [1, 2, 3, 4]
मैं इस हो रही है::
[undefined × 4]
यहाँ मेरी कोड है:
function range(num1, num2) {
var rangeArr = new Array((num2 + 1) - num1);
return rangeArr.map(function(e, i, arr) {return arr[i] = num1 + i});
}
क्या मैं यहाँ याद आ रही है इस लक्ष्य है? जहां तक मैं समस्या बता सकता हूं कि जिस तरह से मैं 'नया ऐरे' का उपयोग कर रहा हूं, उससे कुछ करने के लिए प्रतीत होता है, लेकिन उससे परे मैं खो गया हूं।
ओह, और यहां वह हिस्सा है जो वास्तव में मुझे भ्रमित करता है। यह ठीक काम करता है:
function bleck() {
var blah = [1, 2, 3, 4];
var x = 'wtf';
return blah.map(function(e, i, arr) {return arr[i] = x})
}
["wtf", "wtf", "wtf", "wtf"]
धन्यवाद !!
ऐसा नहीं लगता कि आपको "(num2 + 1) - num1)" की आवश्यकता है, क्योंकि जावास्क्रिप्ट गतिशील सरणी का उपयोग करता है। – Serdnad
@Serdnad यह आवश्यक नहीं है, लेकिन यह उस लंबाई की एक खाली सरणी बनाता है: 'ऐरे (4) = [अपरिभाषित x 4] ' – cincodenada
' .map() 'का उपयोग करने के बारे में नोट जो आपकी समस्या से संबंधित नहीं है: में आपके कॉलबैक में 'वापसी एआर [i] = num1 + i' होने की कोई आवश्यकता नहीं है, आप बस' वापसी संख्या 1 + i; 'कह सकते हैं। 'Arr' में मानों को सेट करने का कोई मतलब नहीं है - जो' rangeArr' जैसा ही सरणी है - क्योंकि 'मानचित्र' एक नई सरणी बनाता है और यही वह है जो आप अपने 'श्रेणी()' फ़ंक्शन से लौट रहे हैं। – nnnnnn