मैं एक ऐसे सरणी में सभी तत्वों को फ़िल्टर करने की कोशिश कर रहा हूं जो 10 से अधिक नई सरणी में हैं। मैं जानबूझकर Array.prototype.filter()
का उपयोग नहीं कर रहा हूं क्योंकि मैं reduce()
विधि सीखना चाहता हूं। यहाँ कोड मैंक्यों Array.prototype.reduce() accumulator के रूप में एक खाली सरणी नहीं ले रहा है?
var collection = [3, 5, 11, 23, 1];
// fileter all the elements bigger than 10 to a new array
var output = collection.reduce(function(filteredArr, collectionElemet) {
if (collectionElemet > 10) {
return filteredArr.push(collectionElemet);
}
}, []);
मैं उम्मीद कर रहा था कि filteredArr
पहले कॉलबैक निष्पादन के समय एक खाली सरणी के साथ प्रारंभ किया जाएगा क्योंकि यह कई here दिए गए उदाहरणों के साथ होता है के साथ खेल रहा था है। लेकिन जब मैं इस कोड को चलाने के लिए, मैं त्रुटि Cannot read property 'push' of undefined
, जहां मैं इसे खिलवाड़ कर रहा हूँ मिल सकता है? धन्यवाद!
अगर हालत सही है - आप एक 'undefined' वापसी - आप एक नंबर सही नहीं है, तो लौटने के लिए,। यदि आप बस फ़िल्टर करना चाहते हैं - 'Array.prototype.filter' का उपयोग करें, तो आपका वर्तमान कोड बदसूरत और भ्रामक है। – zerkms
@zerkms: यह उत्पादन कोड के लिए उचित है, न कि शिक्षा/प्रयोग के लिए। ओपी स्पष्ट रूप से कहता है कि वह 'फ़िल्टर' के बारे में जानता है, लेकिन' कम करने 'को समझने की कोशिश कर रहा है। – Amadan
@ अमानन तो यह एक कमजोर प्रयास है: उनको उपयोग किए जाने वाले उपयोगकाजों का उपयोग करके कार्यों को समझने का प्रयास करना समझ में आता है। – zerkms