जावास्क्रिप्ट एक खाली सरणी कम करें


104

जब मैं ऐरे को कम करता हूं, तो मैं नंबर को शून्य करने की कोशिश कर रहा हूं, लेकिन मैं फ़ंक्शन के व्यवहार को स्पष्ट रूप से नहीं समझता हूं

[].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);
});

परिणाम

""

यदि सरणी में एकमात्र तत्व एक रिक्त स्ट्रिंग है, तो एक रिक्त स्ट्रिंग को पुनः प्राप्त करता है

जवाबों:


227

दूसरा पैरामीटर प्रारंभिक मूल्य के लिए है।

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

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

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

24

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

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

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.