배열에서 요소의 합과 평균을 계산하는 방법은 무엇입니까?


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]훨씬 더 좋을 것입니다.
James McLaughlin

답변:


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++)
Dan D.

5
그 사람이 아니거나 주제가 아닌 것이지만 parseInt ()에 기수 인수를 포함시키는 것이 좋습니다. 이는 sum += parseInt(elmt[i], 10);elmt [i]가 기본 10 인 것으로 가정합니다. link
Ryder Brooks

9
0으로 나누기를 조심하십시오 (elt.length는 0 일 수도 있음)
caulitomaz

2
@BramVanroy 단편 : 아니요, 매번 'l'을 설정하지는 않습니다. 긴 이야기 : DanD의 솔루션은 성능 / 속도를 향상시키는 것입니다. 단일 반복마다 배열의 길이를 확인하는 것이 실제로 로컬 변수에 길이를 저장하고 각 반복을 참조하는 것보다 느리기 때문입니다.
CatalinBerta

9
@VitoGentile 및 DanD는 최신 브라우저가 어쨌든 컴파일하는 성능 향상을위한 코드를 보완하는 것이 가장 좋은 방법이 아닙니다.
nauti

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
이 Array.prototype.reduce를 (지원하지 않기 때문에 이것은 더 많은 참조), <= IE8에서 작동하지 않습니다 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
aabele

14
누적 이동 평균을 사용하면 감소 기능 내에서이 모든 작업을 수행 할 수 있습니다 ( sum/times.length단계 필요 없음 ).var avg = times.reduce(function(p,c,i){return p+(c-p)/(i+1)},0);
zamnuts

6
@ zamnuts 나는 당신과 함께, Thor84no 의견의 순서가 잘못되었다고 생각합니다. 배열을 찾는 곳에서 해고되어 기쁩니다. 너무 복잡합니다. 그러나 나는 코드를 사용하지 않을 것입니다. 간단한 사실 때문에 단계마다 두 개의 추가 기능이 추가되어 결국에는 단일 부서만큼 효율적이지 않을 것입니다.
gotofritz

12
ES2015에서는 꽤 우아합니다. times.reduce((a,b) => (a+b)) / times.length;
Ray Foss

12
5 년 후 @furf는 많은 최신 브라우저에서보다 우아한 "reduce ()"가 더 빠릅니다 (또는 빠름). Chrome 65에서는 대부분의 파이어 폭스 감소가 해당 테스트에서 더 좋습니다.
Sir Robert

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
코드에서 생성하지 않은 객체를 확장하지 마십시오.
Brad

1
[ "RER", "4", "3re", 5, new Object ()]. ​​average ();에서는 업데이트가 작동하지 않습니다. 예상 4.5 대신 0을 반환
Luckylooke

4
그리고 이것은 길이가 없을 때 이기적으로 충돌 할 것입니다
Jimmy Kane

2
@JimmyKane 아니요,이 반환 NaN됩니다.
bzeaman

37

reduce 및 ES6을 사용하여 평균 (평균) 계산 :

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

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


여기에 25 %의 차이가 있습니다. 그렇게 나쁘지 않다고 생각합니다.
Michael

20

일반적으로 1 라이너 감소를 사용하는 평균은 다음과 같습니다

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

gotofritz가 지적했듯이 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
빈 공간이없는 어레이에서만 작동합니다.
gotofritz

1
제안 : 사람들이 읽을 수 있도록 코드 스 니펫의 축소되지 않은 (실제로는 꽤 인쇄 된) 버전을 추가하십시오. 나는 그것들을 직접 편집했지만 사람들의 답변을 그 정도로 바꾸고 싶지 않습니다.
저스틴 모건

16

다음과 같은 정수 배열이 있다고 상상해 봅시다.

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

평균은 다음 공식으로 구합니다.

A = (1 / n) Σxi (i = 1 ~ n 인 경우) ... 그래서 : x1 / n + x2 / n + ... + xn / n

현재 값을 값 수로 나누고 이전 결과를 반환 된 값에 추가합니다.

축소 메소드 서명은

reduce(callback[,default_previous_value])

콜백 감소 기능은 다음 매개 변수를 사용합니다.

  • p : 이전 계산 결과
  • c : 현재 값 (현재 색인에서)
  • i : 현재 배열 요소의 색인 값
  • a : 전류 감소 어레이

두 번째 reduce의 매개 변수는 기본값입니다 (배열이 비어 있는 경우에 사용됨 ).

따라서 평균 감소 방법은 다음과 같습니다.

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);
};

reduce 메소드가 호출 될 때마다 값을 나눌 수 있습니다.

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; 
};

그런 다음 범위의 모든 Array 객체에서

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

NB : NaN 희망을 반환하는 빈 배열은 내 관점에서 0보다 정확하며 특정 사용 사례에서 유용 할 수 있습니다.


13

당신은 또한 사용할 수 있습니다 lodash (다른 편리한 물건이) 수학 부분에, _.sum (배열)과 _.mean (배열).

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

6

가장 빠르지는 않지만 가장 짧고 한 줄에 map () & reduce ()를 사용하고 있습니다.

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,"")
Valen

지도 및 감소 (2009 년 표준화) ES5 꽤 표준 @Tobiq
요한 Echavarria

for (var avg = 0, length = i = arr.length; i--;) avg += arr[i] / length훨씬 더 명확하고 짧으며 훨씬 빠름
Tobiq

2
@Tobiq, 코드는 분명합니다. 이 유형의 루프는 언뜻보기에 이해할 수 없습니다.
Porkopek

5

(많이 미워하는) eval ()을 사용해야하지만 비열한 방법 중 하나입니다.

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()내가 볼 수 있는 유일한 문제는 배열에 숫자 만 포함해야한다는 것입니다 (물론 다른 모든 대답에도 해당됩니다). 숫자가 아닌 항목은 ReferenceError또는SyntaxError, except nested arrays of numbers which introduce ` 숫자가 잘못되었습니다. 물론 서버 측 JS (예 : node.js)에서도 당연히 eval()보안 문제가 발생할 수 있습니다. 그러나 이것은 잘 구조화 된 클라이언트 측 용도에 완벽하게 보입니다.
user56reinstatemonica8

1
실제로 eval()이것을 포함하여 성능 문제가있을 수 있습니다 -nczonline.net/blog/2013/06/25/eval-isnt-evil-just-misunderstood 의 성능 섹션을 참조하십시오
user56reinstatemonica8

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

깔끔한 구현 그래도 줄 대신 for 루프를 사용하여 sum을 구현했을 것입니다. 그래도 여전히 깨끗하게 코딩되었습니다.
XDS

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;

Math.sum을 다음과 같이 사용할 수 있습니다

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하는 것이 더 나은 선택 이라고 생각 합니다. 모두 "숫자 처리기"입니다.
Oboo Cheng

3

여기에 "평균"명령을 추가하기 위해 자바 스크립트의 "Math"객체에 대한 빠른 추가가 있습니다!

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”개체에이 추가 기능이 있습니다!

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

for 루프 카운터를 0으로 설정하십시오 .... 요소 9를 얻었으므로 이제 완료했습니다. 다른 답변은 기본 수학입니다. 변수를 사용하여 합계를 저장하고 (문자열을 정수로 캐스트해야 함) 배열 길이로 나눕니다.


1

사용하려는 모든 변수를 정의하여 시작하십시오. 당신은에 대한 참고하겠습니다 numbers배열, 내가의 문자 표기법을 사용하고 []생성자 메서드에 반대를 array(). 또한 짧은 방법을 사용하여 여러 변수를 0으로 설정하고 있습니다.

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

다음으로 0에서 11까지의 값으로 빈 숫자 배열을 채 웁니다. 원래 시작점으로 이동합니다. 내가 어떻게 배열을 추진하고 있는지 주목하십시오 count++. 이렇게하면 count의 현재 값이 밀리고 다음에 증가합니다.

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

마지막으로, 숫자 배열에서 숫자의 "각"기능을 수행하고 있습니다. 이 함수는 한 번에 하나의 숫자를 처리하며 함수 본문에서 "n"으로 식별됩니다.

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

결국 결과를보기 위해 콘솔에 값 sumavg값을 모두 출력 할 수 있습니다.

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

온라인 http://jsbin.com/unukoj/3/edit에서 확인하십시오.


1

Abdennour TOUMI의 답변을 기반으로합니다. 이유는 다음과 같습니다.

1.) Brad에 동의합니다. 우리가 만들지 않은 객체를 확장하는 것은 좋은 생각이 아닙니다.

2.) array.length, 내가 선호하는 자바 스크립트에서 완전히 신뢰할 수있다 Array.reducebeacuse을 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);

이를 10 배로 실행하면 for 루프 접근과 감소 간의 시간 차이는 무시할 수 있습니다.

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

@AbdennourTOUMI 팁을 주셔서 감사합니다. 명심할 것입니다 ... 그러나 표준이 아니며 표준 트랙이 아닙니다. developer.mozilla.org/en-US/docs/Web/API/Console/timeEnd
Ray Foss

1
원래 질문을 피하고 있지만 성능 측정에 performance.now ()를 사용하는 방법은 무엇입니까?
deejbee

@deejbee 그것은 부동 소수점 정확도를 제공합니다 ...하지만 그것은 좀 더 장황하고 덜 호환성입니다. 마커를 설정하면 실제 코드에서 유용합니다
Ray Foss

1

평균 최단 라이너 :

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

최단 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) (a) 9 + b ( "1") 숫자를 추가하면 결과가 "91"이되지만 추가를 원하기 때문에 parseFloat를 두 번 사용하고 있습니다. 그래서 나는 parseFloat를 사용했다.

2) 결과가 "10"이지만 (a) 9 + parseFloat ( "1")의 추가가 발생하지만 다시 원하지 않는 문자열이 될 것이므로 parseFloat를 사용했습니다.

나는 분명하기를 바랍니다. 제안은 환영 받다


0

다음은 평균을 간단하게 찾는 신인 방법입니다. 이것이 누군가를 돕기를 바랍니다.

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

0

여기 하나의 라이너가 있습니다 :

var average = arr.reduce((sum,item,index,arr)=>index !== arr.length-1?sum+item:sum+item/arr.length,0)

0

나는 이것이 for 루프와 함수로 평균을 계산하는 직접적인 해결책 일 수 있다고 생각합니다.

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);

지도 기능에서 N 구간을 만들고 있습니다. 먼저 모든 숫자를
Eugenio

0

평균이 필요하고 합계 계산 요구 사항을 건너 뛸 수있는 경우에는 단일 호출 reduce로 평균을 계산할 수 있습니다.

// 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 비트 부동 소수점에 저장할 수없는 많은 수가 발생할 수 있습니다.
  • 추가 값을 사용할 수있게되면 기존 평균을 "업데이트"할 수 있습니다.
  • 시퀀스 길이를 몰라도 롤링 평균을 수행 할 수 있습니다.

단점 :

  • 더 많은 부서가 발생합니다
  • 무한대-고용하지 않는 한 Number.MAX_SAFE_INTEGER 항목으로 제한 BigNumber

-1

평균 HTML 콘텐츠

jQuery 또는 Javascript를 사용 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;

itens에 액세스하고 평균을 얻는 다른 4 가지 방법 (!)을 참조하십시오 : http://jsfiddle.net/4fLWB/


2
OP가 X를 요청하고 Y에게 X를 수행하는 방법을 알려 주었기 때문에 Downvote. 또한 데이터에서 DOM을 생성하는 대신 DOM에서 데이터를 가져 오는 아이디어는 어쨌든 피하고 싶을 것 같습니다.
eremzeit

안녕하세요 @eremzeit, 감사합니다. 굵은 제목을 사용하여 "HTML로 내용이 담긴 다른 경우"라고 말하십시오. 관련 정보에 대해, 이러한 종류의 사용 (사용자가 보는 HTML에서 데이터에 직접 액세스)은 학문적 게임이 아닙니다 ... 자바 스크립트에서 "사람으로부터 숨겨지지 않은"HTML (!)에 대한 "감사 가능한 진실"에 관한 것입니다. 위키피디아에서뿐만 아니라, 일반적인 사례를보십시오 : PMC에서 370 만 개의 과학 기사 , 6.6 백만 개의 입법 문서 LexML . 어떤 사람들은 js로 디자인하고 게임하는 것뿐만 아니라 감사 도구를 사용합니다.
Peter Krauss

-1

var arr = [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;
}

평균 (arr) ====== >>>> 3

이것은 배열에서 문자열을 숫자 또는 숫자로 사용합니다.


답변에 대한 설명이 순서대로되어 있습니다.
David Hoelzer

당신이 맞습니다 : 합계가 숫자로 정의되어 이제 작동합니다. 함수에 배열을 공급하면 배열의 평균을 내뿜습니다.
dan chow

-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
ChrisM

-3

이 경우 D3을 권장합니다. 가장 읽기 쉽습니다 (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
평균적으로 운동하기 위해 D3 전체를 추가하는 것은 어리석은 일입니다
gotofritz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.