आइए कल्पना करें कि हमारे पास इस तरह पूर्णांक की एक सरणी है:
var values = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
औसत निम्न सूत्र के साथ प्राप्त किया जाता है
ए = (1 / एन) ( xi (आई = 1 से एन के साथ) ... तो: X1 / n + x2 / n + ... + xn / n
हम वर्तमान मान को मूल्यों की संख्या से विभाजित करते हैं और पिछले परिणाम को लौटे मूल्य में जोड़ते हैं।
कम विधि हस्ताक्षर है
reduce(callback[,default_previous_value])
कम कॉलबैक फ़ंक्शन निम्न पैरामीटर लेता है:
- पी : पिछले गणना के परिणाम
- सी : वर्तमान मूल्य (वर्तमान सूचकांक से)
- i : वर्तमान सरणी तत्व का सूचकांक मूल्य
- a : करंट कम हुआ एरियर
दूसरा कम करने वाला पैरामीटर डिफ़ॉल्ट मान है ... (उपयोग की गई स्थिति खाली होने पर )।
तो औसत कम करने की विधि होगी:
var avg = values.reduce(function(p,c,i,a){return p + (c/a.length)},0);
यदि आप चाहें तो आप एक अलग फ़ंक्शन बना सकते हैं
function average(p,c,i,a){return p + (c/a.length)};
function sum(p,c){return p + c)};
और फिर बस कॉलबैक विधि हस्ताक्षर को देखें
var avg = values.reduce(average,0);
var sum= values.reduce(sum,0);
या सीधे ऐरे प्रोटोटाइप को संवर्धित करें।
Array.prototype.sum = Array.prototype.sum || function (){
return this.reduce(function(p,c){return p+c},0);
};
हर बार मूल्य को कम करने की विधि कहा जाता है, इसे विभाजित करना संभव है।
Array.prototype.avg = Array.prototype.avg || function () {
return this.reduce(function(p,c,i,a){return p+(c/a.length)},0);
};
या इससे भी बेहतर , पहले से परिभाषित Array.protoype.sum () का उपयोग कर
विधि, इस प्रक्रिया को केवल एक बार मेरे डिविजन को अनुकूलित करें :)
Array.prototype.avg = Array.prototype.avg || function () {
return this.sum()/this.length;
};
फिर स्कोप के किसी भी ऐरे ऑब्जेक्ट पर:
[2, 6].avg();// -> 4
[2, 6].sum();// -> 8
नायब: एक NaN इच्छा के साथ एक खाली सरणी मेरे दृष्टिकोण में 0 से अधिक सही है और विशिष्ट उपयोग के मामलों में उपयोगी हो सकती है।
var elmt = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
इतना अच्छा होगा।