একটি অ্যারের মধ্যে উপাদানের যোগফল এবং গড় কীভাবে গণনা করবেন?


177

অ্যারেতে সমস্ত উপাদান যুক্ত করার পাশাপাশি সেগুলি গড়তে আমার সমস্যা হচ্ছে। আমি কীভাবে এটি করব এবং আমার বর্তমানে কোডটি এটি প্রয়োগ করব? উপাদানগুলি নীচে হিসাবে এটি হিসাবে সংজ্ঞায়িত করা হবে বলে মনে করা হয়।

<script type="text/javascript">
//<![CDATA[

var i;
var elmt = new Array();

elmt[0] = "0";
elmt[1] = "1";
elmt[2] = "2";
elmt[3] = "3";
elmt[4] = "4";
elmt[5] = "7";
elmt[6] = "8";
elmt[7] = "9";
elmt[8] = "10";
elmt[9] = "11";

// Problem here
for (i = 9; i < 10; i++){
  document.write("The sum of all the elements is: " + /* Problem here */ + " The average of all the elements is: " + /* Problem here */ + "<br/>");
}   

//]]>
</script>

26
var elmt = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]অনেক ভাল হবে।
জেমস ম্যাকলফলিন

উত্তর:


134
var sum = 0;
for( var i = 0; i < elmt.length; i++ ){
    sum += parseInt( elmt[i], 10 ); //don't forget to add the base
}

var avg = sum/elmt.length;

document.write( "The sum of all the elements is: " + sum + " The average is: " + avg );

অ্যারের মাধ্যমে কেবল পুনরাবৃত্তি করুন, যেহেতু আপনার মানগুলি স্ট্রিং, সেগুলি প্রথমে পূর্ণসংখ্যায় রূপান্তর করতে হবে। এবং গড় হ'ল মানগুলির সংখ্যা দ্বারা বিভক্ত মানগুলির যোগফল।


13
আমি কেবলমাত্র উন্নতি করব তা for(var i = 0; i < elmt.length; i++;)দিয়ে প্রতিস্থাপন করা হবেfor(var i = 0, l = elmt.length; i < l; i++)
ড্যান ডি

5
সেই লোকটি হতে হবে না বা বিষয়বস্তুতে বন্ধ হতে হবে না তবে প্যার্সিইন্ট () এ র‌্যাডিক্স যুক্তি অন্তর্ভুক্ত করা একটি ভাল অনুশীলন। এর অর্থ আমার দ্বারা sum += parseInt(elmt[i], 10);ধরে নেওয়া হচ্ছে এলমেট [i] বেসের 10। লিঙ্কটি
রাইডার ব্রুকস

9
0 দ্বারা বিভাগের দিকে নজর রাখুন (elmt.lethight me 0)
caulitomaz

2
@ ব্রামভানরোয় ছোট গল্প: না, এটি প্রতিবারই 'এল' সেট করে না। দীর্ঘ গল্প: ড্যানডি এর সমাধান হল কর্মক্ষমতা / গতি উন্নতি করা, কারণ প্রতিটি অ্যারেটির দৈর্ঘ্য পরীক্ষা করা প্রতিটি একক পুনরাবৃত্তি আসলে স্থানীয় ভেরিয়েবেলে দৈর্ঘ্য সংরক্ষণ করে এবং প্রতিটি পুনরাবৃত্তিকে উল্লেখ করার চেয়ে ধীর হয়।
ক্যাটালিনবার্টা

9
@ ভিটোজেন্টিল এবং ড্যানডি পারফরম্যান্স লাভের জন্য কোডটি অগলিফাই করছে যা আধুনিক ব্রাউজারগুলি যেভাবেই সংকলন করে তা সেরা অনুশীলন হওয়া উচিত নয়।
নটি

496

আমি আরও মার্জিত বিবেচনা একটি সমাধান:

const sum = times.reduce((a, b) => a + b, 0);
const avg = (sum / times.length) || 0;

console.log(`The sum is: ${sum}. The average is: ${avg}.`);

1
এটি <= আইই 8-তে কাজ করবে না, কারণ এটি অ্যারে.প্রোটোটাইপ.আরডুসকে সমর্থন করে না () বিকাশকারী.মোজিলা.আর.ইন.ইউএস
ডকস

14
ক্রমবর্ধমান চলমান গড়ের সাথে, আপনি হ্রাস sum/times.lengthvar avg = times.reduce(function(p,c,i){return p+(c-p)/(i+1)},0);
ফাংশনটিতে

6
@ জামনটস আমি আপনার সাথে রয়েছি, আমার ধারণা থোর 84 নোট পুরোপুরি বাইরে নেই - অ্যারেআরেডুসকে খুব জটিল মনে হয় এমন জায়গা থেকে আমি বরখাস্ত হতে পেরে খুশি হব। তবে আমি আপনার
কোডটিও

12
ES2015 এ এটি বেশ খানিকটা মার্জিত। times.reduce((a,b) => (a+b)) / times.length;
রে ফস

12
@ ফার্ফ 5 বছর পরে, অনেক আধুনিক ব্রাউজারে এটি দেখতে দেখতে যত বেশি মার্জিত "হ্রাস ()" দ্রুত (বা তত দ্রুত) হয়। Chrome এ 65 এবং বেশিরভাগ ফায়ারফক্স হ্রাস সেই পরীক্ষায় ভাল better
স্যার রবার্ট

116

ES6

const average = arr => arr.reduce( ( p, c ) => p + c, 0 ) / arr.length;
    
const result = average( [ 4, 4, 5, 6, 6 ] ); // 5
    
console.log(result);


3
উন্নত:Array.prototype.average = function () { var sum = 0, j = 0; for (var i = 0; i < this.length, isFinite(this[i]); i++) { sum += parseFloat(this[i]); ++j; } return j ? sum / j : 0; };
গিলাদ পেলেগ

42
দয়া করে, আপনার কোড দ্বারা তৈরি না করা অবজেক্টগুলিকে প্রসারিত করবেন না।
ব্র্যাড

1
আপডেট আপডেট এর জন্য কাজ করে না: ["RER", "4", "3re", 5, নতুন অবজেক্ট ()] গড় (); প্রত্যাশিত 4.5 এর পরিবর্তে 0 প্রদান করে
লাকীলুক

4
কোনও দৈর্ঘ্য না থাকলে এবং এটি এপিক্যালি ক্র্যাশ হয়ে যাবে
জিমি কেন

2
@ জিমি কেনে না, এটি ফিরে আসবে NaN
bzeaman

37

হ্রাস এবং ES6 ব্যবহার করে গড় (গড়) গণনা করা হচ্ছে :

const average = list => list.reduce((prev, curr) => prev + curr) / list.length;

const list = [0, 10, 20, 30]
average(list) // 15


এখানে এটি 25% এর পার্থক্য। এতটা খারাপ নয়, আমার মনে হয়।
মাইকেল 14

20

সাধারণত ওয়ান-লাইনার হ্রাস ব্যবহারের গড় এই জাতীয়

elements.reduce(function(sum, a,i,ar) { sum += a;  return i==ar.length-1?(ar.length==0?0:sum/ar.length):sum},0);

বিশেষত প্রশ্ন জিজ্ঞাসা

elements.reduce(function(sum, a,i,ar) { sum += parseFloat(a);  return i==ar.length-1?(ar.length==0?0:sum/ar.length):sum},0);

একটি দক্ষ সংস্করণ মত

elements.reduce(function(sum, a) { return sum + a },0)/(elements.length||1);

1 মিনিটে জাভাস্ক্রিপ্ট অ্যারে হ্রাস বুঝুন http://www.airpair.com/javascript/javascript-array-reduce

গোটোফ্রিটজ যেমন দেখিয়েছে অ্যারে.আরেডুস অনির্ধারিত মানগুলি এড়িয়ে যায়। সুতরাং এখানে একটি ঠিক আছে:

(function average(arr){var finalstate=arr.reduce(function(state,a) { state.sum+=a;state.count+=1; return state },{sum:0,count:0}); return finalstate.sum/finalstate.count})([2,,,6])

2
elements.length!=0?elements.length:1 এটিও এর মতো লেখা যেতে পারে: elements.length || 1 যা সংক্ষিপ্ত এবং পড়া সহজ।
4rzael

2
মনে রাখবেন এটি কেবল ফাঁকা ফাঁক ছাড়াই অ্যারেগুলির জন্য কাজ করে
getofritz

1
পরামর্শ: আপনার কোড স্নিপেটের আনমিনাইড (প্রকৃতপক্ষে কেবল সুন্দর-প্রিন্টেড) সংস্করণগুলি যুক্ত করুন যাতে লোকেরা সেগুলি পড়তে পারে। আমি সেগুলি নিজের মধ্যে সম্পাদনা করব, তবে আমি মানুষের উত্তরগুলি সে পরিমাণে পরিবর্তন করতে পছন্দ করি না।
জাস্টিন মরগান

16

আসুন কল্পনা করুন যে আমাদের কাছে এর মতো পূর্ণসংখ্যার অ্যারে রয়েছে:

var values = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];

নীচের সূত্রের সাথে গড় প্রাপ্ত হয়

এ = (১ / এন) ixi (আই = 1 থেকে এন সহ) ... সুতরাং: এক্স 1 / এন + এক্স 2 / এন + ... + এক্সএন / এন

আমরা মানটির সংখ্যার দ্বারা বর্তমান মানকে বিভক্ত করি এবং পূর্ববর্তী ফলাফলকে প্রত্যাবর্তিত মানের সাথে যুক্ত করি।

হ্রাস পদ্ধতি স্বাক্ষর হয়

reduce(callback[,default_previous_value])

হ্রাস কলব্যাক ফাংশন নিম্নলিখিত পরামিতি লাগে:

  • পি : পূর্ববর্তী গণনার ফলাফল
  • সি : বর্তমান মান (বর্তমান সূচী থেকে)
  • i : বর্তমান অ্যারে এলিমেন্টের সূচক মান
  • একটি : বর্তমান হ্রাস অ্যারে

দ্বিতীয় হ্রাসের প্যারামিটারটি হ'ল ডিফল্ট মান ... (অ্যারেটি খালি থাকলে ব্যবহৃত হয় )।

সুতরাং গড় হ্রাস পদ্ধতিটি হ'ল:

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.prototype.avg = Array.prototype.avg || function () {
  return this.sum()/this.length; 
};

তারপরে সুযোগের কোনও অ্যারে অবজেক্টে:

[2, 6].avg();// -> 4
[2, 6].sum();// -> 8

এনবি: রিটার্ন সহ একটি খালি অ্যারে আমার দৃষ্টিকোণে 0 এর চেয়ে বেশি সঠিক এবং নির্দিষ্ট ব্যবহারের ক্ষেত্রে কার্যকর হতে পারে।


13

আপনি ম্যাথ অংশে লডাশ , _.সুম (অ্যারে) এবং _.মিয়ান (অ্যারে )ও ব্যবহার করতে পারেন (এছাড়াও অন্যান্য সুবিধাজনক জিনিস রয়েছে)।

_.sum([4, 2, 8, 6]);
// => 20
_.mean([4, 2, 8, 6]);
// => 5

6

দ্রুততম নয়, তবে সংক্ষিপ্ততম এবং এক লাইনে মানচিত্র () এবং হ্রাস () ব্যবহার করছে:

var average = [7,14,21].map(function(x,i,arr){return x/arr.length}).reduce(function(a,b){return a + b})

1
ছোট হতে পারে [7,14,21].reduce((avg,e,i,arr)=>avg+e/arr.length,0);তবে খালি অ্যারেতে বিভিন্ন আচরণ সহ। আপনি যদি চান যে ফলাফলটি খালি অ্যারেতে ফাঁকা হয়:[].reduce((a,e,i,arr)=>(a?a:0)+e/arr.length,"")
ভ্যালেন

@ তোবিকের মানচিত্র এবং হ্রাস ইএস 5-এর পর থেকে বেশ মানসম্পন্ন (২০০৯-এ
মানকীকৃত

for (var avg = 0, length = i = arr.length; i--;) avg += arr[i] / lengthঅনেক পরিষ্কার, খাটো এবং আরও দ্রুত
টোবিক

2
@ তোবিক, আপনার কোডটি পরিষ্কার কিছু নয়। এই ধরণের লুপটি প্রথম নজরে বোধগম্য।
পোরকোপেক

5

একটি ছদ্মবেশী উপায় আপনি এটি করতে পেরেছিলেন যদিও এর জন্য (অত্যধিক ঘৃণ্য) ইভাল () এর ব্যবহার প্রয়োজন।

var sum = eval(elmt.join('+')), avg = sum / elmt.length;
document.write("The sum of all the elements is: " + sum + " The average of all the elements is: " + avg + "<br/>");

কেবল ভেবেছিলাম আমি এটিকে 'বাক্সের বাইরে' বিকল্পগুলির মধ্যে একটি হিসাবে পোস্ট করব। আপনি কখনই জানেন না, বোকামি আপনাকে একটি বিন্দু দিতে পারে (বা সরিয়ে নিয়ে যায়)।


+1 চমৎকার দক্ষ ও লাইনার! যদি এটি ব্রাউজার জাভাস্ক্রিপ্টের ক্লায়েন্ট-সাইড হয় তবে eval()আমি দেখতে পাচ্ছি যে কেবলমাত্র অ্যারেতে কেবল সংখ্যা রয়েছে (এটি অবশ্যই অন্য সমস্ত উত্তরগুলির ক্ষেত্রেও সত্য) sure একটি ReferenceErrorবা সংখ্যার সাথে অ-সংখ্যাসূচক এন্ট্রি ক্রাশ SyntaxError, except nested arrays of numbers which introduce । একটি ভুল সংখ্যার মোটের কারণ। এবং অবশ্যই সার্ভার সাইড জেএসে, যেমন নোড.জেএস, তবে স্বাভাবিকভাবেই eval()সুরক্ষা সমস্যাগুলি প্রবর্তন করতে পারে। তবে এটি কোনও সু-কাঠামোগত ক্লায়েন্ট-সাইড ব্যবহারের জন্য নিখুঁত দেখাচ্ছে।
user56reinstatemonica8

1
প্রকৃতপক্ষে এর eval()মতো অন্তর্ভুক্ত করার জন্য একটি পারফরম্যান্সের সমস্যা থাকতে পারে
nczonline.net/blog/2013/06/25/eval-isnt-evil-just-mused

5

আমি আমার ব্যক্তিগত গ্রন্থাগারে এই পদ্ধতিগুলি ব্যবহার করি:

Array.prototype.sum = Array.prototype.sum || function() {
  return this.reduce(function(sum, a) { return sum + Number(a) }, 0);
}

Array.prototype.average = Array.prototype.average || function() {
  return this.sum() / (this.length || 1);
}

সম্পাদনা: এগুলি ব্যবহার করতে কেবল অ্যারেটিকে তার যোগফল বা গড়ের জন্য কেবল জিজ্ঞাসা করুন:

[1,2,3].sum() // = 6
[1,2,3].average() // = 2

ঝরঝরে বাস্তবায়ন আমি চিন্তাভাবনা কমানোর পরিবর্তে লুপের জন্য ব্যবহারের যোগফল প্রয়োগ করতাম। এখনও খুব পরিষ্কারভাবে কোডড যদিও।
এক্সডিএস

5

ইন ES6-প্রস্তুত ব্রাউজার এই polyfill সহায়ক হতে পারে।

Math.sum = (...a) => Array.prototype.reduce.call(a,(a,b) => a+b)

Math.avg = (...a) => this.sum(...a)/a.length;

আপনি মধ্যে একই কল পদ্ধতি শেয়ার করতে পারেন Math.sum, Math.avg এবং Math.maxযেমন

var maxOne = Math.max(1,2,3,4) // 4;

আপনি ম্যাথ.সাম হিসাবে ব্যবহার করতে পারেন

var sumNum = Math.sum(1,2,3,4) // 10

বা আপনার যদি যোগফলের জন্য অ্যারে থাকে তবে আপনি ব্যবহার করতে পারেন

var sumNum = Math.sum.apply(null,[1,2,3,4]) // 10

ঠিক যেমন

var maxOne = Math.max.apply(null,[1,2,3,4]) // 4

এতে পদ্ধতি যুক্ত করার পরিবর্তে Array.prototype, আমি মনে করি যে বিষয়বস্তুতে থিম যুক্ত করা আরও Mathভাল পছন্দ - এগুলি সবাই "নম্বর হ্যান্ডলার"।
ওবু চেং

3

এটিতে একটি "গড়" কমান্ড যুক্ত করার জন্য জাভাস্ক্রিপ্টে "ম্যাথ" অবজেক্টটিতে একটি দ্রুত সংযোজন এখানে দেওয়া হল !!

Math.average = function(input) {
  this.output = 0;
  for (this.i = 0; this.i < input.length; this.i++) {
    this.output+=Number(input[this.i]);
  }
  return this.output/input.length;
}

তারপরে যোগফল পাওয়ার জন্য আমার কাছে "ম্যাথ" অবজেক্টে এই সংযোজন রয়েছে!

Math.sum = function(input) {
  this.output = 0;
  for (this.i = 0; this.i < input.length; this.i++) {
    this.output+=Number(input[this.i]);
  }
  return this.output;
}

তাহলে আপনি যা করছেন তা হ'ল

alert(Math.sum([5,5,5])); //alerts “15”
alert(Math.average([10,0,5])); //alerts “5”

এবং যেখানে আমি স্থানধারক অ্যারেটি রেখেছি কেবল আপনার ভেরিয়েবলটিতে পাস করুন (তারা যদি সংখ্যার হয় তবে ইনপুটটি কোনও সংখ্যায় পার্স করার কারণে একটি স্ট্রিং হতে পারে!)


1

আপনার লুপ কাউন্টারের জন্য 0 তে সেট করুন .... আপনি 9 টি এলিমেন্ট পেয়ে যাচ্ছেন এবং তারপরে আপনি এখন যেমনটি করেছেন তেমন শেষ হয়ে গেল। অন্যান্য উত্তরগুলি মৌলিক গণিত। আপনার যোগফল (ইনটগুলিতে স্ট্রিংগুলি toালাই করা দরকার) সঞ্চয় করতে একটি ভেরিয়েবল ব্যবহার করুন এবং আপনার অ্যারের দৈর্ঘ্য দ্বারা ভাগ করুন।


1

আমরা যে ভেরিয়েবলগুলি ব্যবহারের পরিকল্পনা করছি তার সমস্ত সংজ্ঞা দিয়ে শুরু করুন। আপনি নোট করবেন যে numbersঅ্যারের জন্য, আমি []নির্মাণকারীর পদ্ধতির বিপরীতে আক্ষরিক স্বরলিপি ব্যবহার করছি array()। অতিরিক্ত হিসাবে, আমি 0 এ একাধিক ভেরিয়েবল সেট করতে একটি সংক্ষিপ্ত পদ্ধতি ব্যবহার করছি।

var numbers = [], count = sum = avg = 0;

এরপরে আমি আমার খালি সংখ্যাগুলি অ্যারে 0 থেকে 11 এর মান দিয়ে পপুলেট করছি This এটি আমাকে আপনার মূল সূচনা পয়েন্টে আনতে হবে। আমি কীভাবে অ্যারেতে ধাক্কা দিচ্ছি তা নোট করুন count++। এটি গণনাটির বর্তমান মানটিকে ধাক্কা দিচ্ছে এবং তারপরে পরের বারের জন্য এটি বৃদ্ধি করে।

while ( count < 12 )
    numbers.push( count++ );

শেষ অবধি, আমি সংখ্যার অ্যারেতে "প্রতিটি" জন্য একটি ফাংশন সম্পাদন করছি। এই ফাংশনটি একবারে একটি সংখ্যা পরিচালনা করবে, যা আমি ফাংশন বডির মধ্যে "এন" হিসাবে চিহ্নিত করছি।

numbers.forEach(function(n){
  sum += n; 
  avg = sum / numbers.length;
});

শেষ পর্যন্ত, ফলাফলটি দেখতে আমরা আমাদের কনসোলের মান sumএবং মান উভয়ই আউটপুট করতে পারি avg:

// Sum: 66, Avg: 5.5
console.log( 'Sum: ' + sum + ', Avg: ' + avg );

এটি অনলাইনে http://jsbin.com/unukoj/3/edit এ কর্মে দেখুন


1

আমি কেবল আবডেনর টুমির উত্তরে তৈরি করছি। এখানে কারণগুলি:

১) আমি ব্র্যাডের সাথে একমত, আমি মনে করি না যে আমরা তৈরি করি নি এমন বস্তুর প্রসারিত করা ভাল ধারণা is

২) array.lengthজাভাস্ক্রিপ্টে হুবহু নির্ভরযোগ্য, আমি Array.reduceবিচুস পছন্দ করি a=[1,3];a[1000]=5;, এখন a.lengthফিরে আসবে 1001

function getAverage(arry){
    // check if array
    if(!(Object.prototype.toString.call(arry) === '[object Array]')){
        return 0;
    }
    var sum = 0, count = 0; 
    sum = arry.reduce(function(previousValue, currentValue, index, array) {
        if(isFinite(currentValue)){
            count++;
            return previousValue+ parseFloat(currentValue);
        }
        return previousValue;
    }, sum);
    return count ? sum / count : 0; 
};

1
Array.prototype.avg=function(fn){
    fn =fn || function(e,i){return e};
    return (this.map(fn).reduce(function(a,b){return parseFloat(a)+parseFloat(b)},0) / this.length ) ; 
};

তারপরে:

[ 1 , 2 , 3].avg() ;  //-> OUT : 2

[{age:25},{age:26},{age:27}].avg(function(e){return e.age}); // OUT : 26

1

চিরসবুজ ব্রাউজারগুলিতে আপনি তীর ফাংশন ব্যবহার করতে পারেন avg = [1,2,3].reduce((a,b) => (a+b);

এটি ১০,০০,০০০ বার চালানো, লুপের কাছে এবং হ্রাসের মধ্যে সময়ের পার্থক্য নগণ্য।

s=Date.now();for(i=0;i<100000;i++){ n=[1,2,3]; a=n.reduce((a,b) => (a+b)) / n.length };
console.log("100k reduce took " + (Date.now()-s) + "ms.");

s=Date.now();for(i=0;i<100000;i++){n=[1,2,3]; nl=n.length; a=0; for(j=nl-1;j>0;j--){a=a+n[j];} a/nl };
console.log("100k for loop took " + (Date.now()-s) + "ms.");

s=Date.now();for(i=0;i<1000000;i++){n=[1,2,3]; nl=n.length; a=0; for(j=nl-1;j>0;j--){a=a+n[j];} a/nl };
console.log("1M for loop took " + (Date.now()-s) + "ms.");

s=Date.now();for(i=0;i<1000000;i++){ n=[1,2,3]; a=n.reduce((a,b) => (a+b)) / n.length };
console.log("1M reduce took " + (Date.now()-s) + "ms.");

/* 
 * RESULT on Chrome 51
 * 100k reduce took 26ms.
 * 100k for loop took 35ms.
 * 10M for loop took 126ms.
 * 10M reduce took 209ms.
 */


1
আপনি আরও বিষয়ে জানার জন্য প্রয়োজন console.time&console.timeEnd
Abdennour TOUMI

@ অ্যাডেননার টুউমি টিপটির জন্য ধন্যবাদ, আমি এটি মনে রাখব ... তবে এটি মানসম্মত নয় এবং মানের ট্র্যাকের নয়। বিকাশকারী.মোজিলা.আর.ইন-
রে ফস

1
আমি জানি যে আমি আসল প্রশ্নগুলি বন্ধ করছি তবে পারফরম্যান্সের পরিমাপের জন্য পারফরম্যান্স.উনুন () কীভাবে ব্যবহার করব?
ডিজেবি

@ ডিজেবি এটি ভাসমান পয়েন্ট নির্ভুলতার প্রস্তাব দেয় ... তবে এটি আরও বাচ্চা এবং কম সামঞ্জস্যপূর্ণ। এটির সাথে চিহ্নিতকারীগুলি স্থাপন করা বাস্তব বিশ্বের কোডে কার্যকর হবে
রায় ফস

1

গড়তম সংক্ষিপ্ততম এক লাইনার:

let avg = [1,2,3].reduce((a,v,i)=>(a*i+v)/(i+1));

সংক্ষিপ্ততম ওয়ান লাইনার:

let sum = [1,2,3].reduce((a,b)=>a+b);

0

শুধু লাথি জন্য:

var elmt = [0, 1, 2,3, 4, 7, 8, 9, 10, 11], l = elmt.length, i = -1, sum = 0;
for (; ++i < l; sum += elmt[i])
    ;
document.body.appendChild(document.createTextNode('The sum of all the elements is: ' + sum + ' The average of all the elements is: ' + (sum / l)));

0

আমি মনে করি আমরা পছন্দ করতে পারি

var k=elmt.reduce(function(a,b){return parseFloat(a+parseFloat(b));})
var avg=k/elmt.length; 
console.log(avg);

আমি দুবার পার্সফ্লোট ব্যবহার করছি কারণ যখন 1) আপনি (ক) 9 + বি ("1") নম্বর যুক্ত করেন তবে ফলাফলটি "91" হবে তবে আমরা সংযোজন চাই। সুতরাং আমি পার্সফ্লোট ব্যবহার করেছি

2) যখন (ক) 9 + পার্সফ্লোট ("1") সংযোজন ঘটে তবে ফলাফল "10" হবে তবে এটি স্ট্রিংয়ে থাকবে যা আমরা আবার চাই না আমি পার্সফ্লোট ব্যবহার করেছি।

আমি আশা করি আমি পরিষ্কার। পরামর্শ স্বাগত জানাই


0

এখানে গড় অনুসন্ধানের সহজ উপায়টি এখানে is আশা করি এটি কারও সাহায্য করবে।

function numAvg(num){
    var total = 0;
    for(var i = 0;i < num.length; i++) { 
        total+=num[i];
    }
    return total/num.length;
}


0

আমি মনে করি এটি লুপ এবং ফাংশনটির সাথে গড় গণনা করার সরাসরি সমাধান হতে পারে।

var elmts = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];

function average(arr) {
    var total = 0;
    for (var i = 0; i < arr.length; i++) {
        total += arr[i];
    }
        console.log(Math.round(total/arr.length));
}

average(elmts);

0

এটির জন্য একটি অবিরাম সমাধান বলে মনে হচ্ছে তবে আমি এটি সংক্ষিপ্ত এবং মার্জিত বলে মনে করেছি।

const numbers = [1,2,3,4];
const count = numbers.length;
const reducer = (adder, value) => (adder + value);
const average = numbers.map(x => x/count).reduce(reducer);
console.log(average); // 2.5

বা আরও কৌতূহলীভাবে:

const numbers = [1,2,3,4];
const average = numbers.map(x => x/numbers.length).reduce((adder, value) => (adder + value));
console.log(average); // 2.5

আপনার ব্রাউজারের উপর নির্ভর করে আপনাকে সুস্পষ্ট ফাংশন কলগুলি করতে হতে পারে কারণ তীর ফাংশনগুলি সমর্থিত নয়:

const r = function (adder, value) {
        return adder + value;
};
const m = function (x) {
        return x/count;
};
const average = numbers.map(m).reduce(r);
console.log(average); // 2.5

বা:

const average1 = numbers
    .map(function (x) {
        return x/count;
     })
    .reduce(function (adder, value) {
        return adder + value;
});
console.log(average1);

আপনি মানচিত্রের কার্যক্রমে এন বিভাগ তৈরি করছেন। প্রথমে মোট সংখ্যাতে সমস্ত সংখ্যা হ্রাস করা এবং তারপরে একটি মাত্র বিভাগ করা ভাল
Eugenio

0

আপনি যদি গড়ের প্রয়োজন হয় এবং যোগফলটি গণনা করার প্রয়োজনীয়তা বাদ দিতে পারেন তবে আপনি হ্রাসের একক কল দিয়ে গড়ের হিসাব করতে পারেন:

// Assumes an array with only values that can be parsed to a Float
var reducer = function(cumulativeAverage, currentValue, currentIndex) {
  // 1. multiply average by currentIndex to find cumulative sum of previous elements
  // 2. add currentValue to get cumulative sum, including current element
  // 3. divide by total number of elements, including current element (zero-based index + 1)
  return (cumulativeAverage * currentIndex + parseFloat(currentValue))/(currentIndex + 1)
}
console.log([1, 2, 3, 4, 5, 6, 7, 8, 9, 10].reduce(reducer, 0)); // => 5.5
console.log([].reduce(reducer, 0)); // => 0
console.log([0].reduce(reducer, 0)); // => 0
console.log([].reduce(reducer, 0)); // => 0
console.log([,,,].reduce(reducer, 0)); // => 0
console.log([].reduce(reducer, 0)); // => 0

0

যদি কারও কখনও এটির প্রয়োজন হয় - এটি একটি পুনরাবৃত্ত গড়।

মূল প্রশ্নের প্রসঙ্গে, আপনি যদি ব্যবহারকারীকে অতিরিক্ত মান সন্নিবেশ করানোর অনুমতি দেন এবং প্রতিটি উপাদানকে আবার দেখার ব্যয় ব্যতীত বিদ্যমান গড়টি "আপডেট" করতে চান তবে আপনি পুনরাবৃত্তির গড়টি ব্যবহার করতে পারেন।

/**
 * Computes the recursive average of an indefinite set
 * @param {Iterable<number>} set iterable sequence to average
 * @param {number} initAvg initial average value
 * @param {number} initCount initial average count
 */
function average(set, initAvg, initCount) {
  if (!set || !set[Symbol.iterator])
    throw Error("must pass an iterable sequence");

  let avg = initAvg || 0;
  let avgCnt = initCount || 0;
  for (let x of set) {
    avgCnt += 1;
    avg = avg * ((avgCnt - 1) / avgCnt) + x / avgCnt;
  }
  return avg; // or {avg: avg, count: avgCnt};
}

average([2, 4, 6]);    //returns 4
average([4, 6], 2, 1); //returns 4
average([6], 3, 2);    //returns 4
average({
  *[Symbol.iterator]() {
    yield 2; yield 4; yield 6;
  }
});                    //returns 4

কিভাবে:

এটি বর্তমান গড় এবং উপাদান গণনা বজায় রেখে কাজ করে। যখন কোনও নতুন মান অন্তর্ভুক্ত করা হয় তখন আপনি বাড়তি গণনাটি 1 দ্বারা (count-1) / countযোগ newValue / countকরবেন , বিদ্যমান গড়কে স্কেল করুন এবং গড়ে যুক্ত করুন।

উপকারিতা:

  • আপনি সমস্ত উপাদানগুলির সমষ্টি করেন না, যার ফলে এমন একটি বৃহত সংখ্যার ফলাফল হতে পারে যা একটি 64-বিট ফ্লোটে সংরক্ষণ করা যায় না।
  • অতিরিক্ত মান উপলভ্য হলে আপনি একটি বিদ্যমান গড় "আপডেট" করতে পারেন।
  • আপনি ক্রম দৈর্ঘ্য না জেনে একটি ঘূর্ণায়মান গড় সঞ্চালন করতে পারেন।

downsides:

  • আরও অনেক বিভাজন ঘটে
  • অসীম নয় - নাম্বারে সীমাবদ্ধ MA BigNumber

-1

এইচটিএমএল সামগ্রীর আইটেমের গড়

JQuery বা জাভাস্ক্রিপ্ট এর সাহায্যে querySelectorআপনার ফর্ম্যাটেড ডেটাতে সরাসরি অ্যাক্সেস রয়েছে ... উদাহরণ:

<p>Elements for an average: <span class="m">2</span>, <span class="m">4</span>,
   <span class="m">2</span>, <span class="m">3</span>.
</p>

সুতরাং, jQuery সঙ্গে আপনার আছে

var A = $('.m')
  .map(function(idx) { return  parseInt($(this).html()) })
  .get();
var AVG = A.reduce(function(a,b){return a+b}) / A5.length;

এটির অ্যাক্সেস পেতে এবং এটির গড় পেতে আরও 4 টি উপায় (!) দেখুন: http://jsfiddle.net/4fLWB/


2
ডাউনভোট কারণ ওপি এক্স করতে বলেছে এবং আপনি তাকে ওয়াই তখন এক্স কীভাবে করতে হবে তা জানিয়েছিলেন। এছাড়াও, ডেটা থেকে ডিওএম তৈরি করার চেয়ে ডিওএম থেকে ডেটা টানানোর ধারণাটি এমন কিছু মনে হয় যা আপনি সম্ভবত যাইহোক এড়াতে চান।
ইমারিজিট

হাই @ ইরেমজিট, ধন্যবাদ মনোযোগ আমি "এইচটিএমএল বিষয়বস্তু সহ এটি অন্যান্য ক্ষেত্রে" বলার জন্য সাহসী শিরোনাম ব্যবহার করি, দয়া করে এটি বিবেচনা করুন ... প্রাসঙ্গিক সম্পর্কে, এই জাতীয় ব্যবহার (ব্যবহারকারী যে HTML থেকে ডেটা সরাসরি অ্যাক্সেস করে) এটি কোনও একাডেমিক খেলা নয় ... (!): এটি হবে "মূল্যায়নযোগ্য সত্য", এইচটিএমএল, না জাভাস্ক্রিপ্ট এ "মানুষের কাছ থেকে লুকানো" ... শুধু উইকিপিডিয়া এ টিপিক্যাল ক্ষেত্রে দেখতে মধ্যে যে সম্পর্কে 3.7 মিলিয়ন PMC এ বৈজ্ঞানিক নিবন্ধ , এ বিধানিক নথি 6.6 মিলিয়ন লেক্সএমএল । কিছু লোক কেবল জেএস সহ ডিজাইন এবং গেমস করে না, নিরীক্ষণের জন্য সরঞ্জামগুলি করে।
পিটার ক্রাউস

-1

var অ্যারে = [1,2,3,4,5]

function avg(arr){
  var sum = 0;
  for (var i = 0; i < arr.length; i++) {
    sum += parseFloat(arr[i])
  }
  return sum / i;
}

গড় (আরআর) ====== >>>>> 3

এটি অ্যারেতে সংখ্যা বা সংখ্যা হিসাবে স্ট্রিংয়ের সাথে কাজ করে।


আপনার উত্তরের কিছু ব্যাখ্যা যথাযথ।
ডেভিড হোলজার

আপনি ঠিক বলেছেন: একটি সংখ্যা হিসাবে সংজ্ঞায়িত যোগফল যাতে এটি এখন কাজ করে। ফাংশনটিকে একটি অ্যারে খাওয়ান এবং এটি অ্যারের গড়ের বাইরে যায়।
ডান চাউ

-2
    var scores =[90, 98, 89, 100, 100, 86, 94];
        var sum = 0;
        var avg = 0;
        for(var i = 0; i < scores.length;i++){
  //Taking sum of all the arraylist
            sum = sum + scores[i];   
                }
  //Taking average     
             avg = sum/scores.length;        
  //this is the function to round a decimal no    
             var round = avg.toFixed();
             console.log(round);

1
স্ট্যাক ওভারফ্লোতে আপনাকে স্বাগতম। আপনার প্রশ্নের উত্তরটি কেন এবং কীভাবে প্রশ্নের উত্তর দেয় তা বিশদভাবে ব্যাখ্যা করা উচিত। কোড স্নিপেটগুলিকে উত্সাহিত করার সময় আপনার কোডটি ব্যাখ্যা করা উচিত যাতে দর্শক এটি বুঝতে পারে। আছে: উত্তর নির্দেশিকা এখানে করার জন্য একটি কেমন stackoverflow.com/help/how-to-answer
পবিত্র তৈল

-3

আমি এই ক্ষেত্রে ডি 3 সুপারিশ করব। এটি সর্বাধিক পঠনযোগ্য (এবং 2 টি বিভিন্ন ধরণের গড় সরবরাহ করে)

let d3 = require('d3');
let array = [1,2,3,4];
let sum = d3.sum(array); //10
let mean = d3.mean(array); //2.5
let median = d3.median(array); 

4
গোটা ডি 3 যুক্ত করতে কেবলমাত্র গড়
গড়ার জন্য গোশক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.