2014-04-29 16 views
56

जब मैं सरणी को कम करने, मैं संख्या शून्य पाने के लिए कोशिश कर रहा हूँ कम है, लेकिन मैं स्पष्ट रूप से न समारोहजावास्क्रिप्ट एक खाली सरणी

[].reduce(function(previousValue, currentValue){ 
    return Number(previousValue) + Number(currentValue); 
}); 

परिणाम

TypeError: Reduce of empty array with no initial value 

लगता है कि के व्यवहार को समझने यदि सरणी रिक्त है मैं इसे कम नहीं कर सकते

[""].reduce(function(previousValue, currentValue){ 
    return Number(previousValue) + Number(currentValue); 
}); 

परिणाम

"" 

सरणी में केवल तत्व एक खाली स्ट्रिंग है, तो कोई रिक्त स्ट्रिंग

उत्तर

113

The second parameter प्रारंभिक मूल्य के लिए है प्राप्त करता है।

[].reduce(function(previousValue, currentValue){ 
    return Number(previousValue) + Number(currentValue); 
}, 0); 

या ES6 का उपयोग कर:

[].reduce((previousValue, currentValue) => previousValue + currentValue, 0); 
14

दोनों व्यवहार the spec के अनुसार कर रहे हैं।

आप नहीं reduce एक खाली सरणी जब तक आप स्पष्ट दूसरा तर्क के रूप में एक प्रारंभिक "संचित" मूल्य प्रदान कर सकते हैं:

यदि कोई initialValue प्रदान की गई थी, तो PREVIOUSVALUE के बराबर होगा सरणी में पहला मान और वर्तमान वैल्यू सेकेंड के बराबर होगा। यह एक TypeError है यदि सरणी में कोई तत्व नहीं है और प्रारंभिक वैल्यू प्रदान नहीं किया गया है।

यदि सरणी में कम से कम एक तत्व है तो प्रारंभिक मान प्रदान करना वैकल्पिक है। हालांकि, अगर कोई प्रदान नहीं किया जाता है तो सरणी का पहला तत्व प्रारंभिक मान के रूप में उपयोग किया जाता है और reduce आपके कॉलबैक का आह्वान करके बाकी सरणी तत्वों को संसाधित करता रहता है। आपके मामले में सरणी में केवल एक तत्व होता है, ताकि तत्व प्रारंभिक मान और अंतिम मान भी बन जाए, क्योंकि कॉलबैक के माध्यम से संसाधित होने के लिए कोई और तत्व नहीं हैं।

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