Mam problemy z dodaniem wszystkich elementów tablicy, a także ich uśrednieniem. Jak mam to zrobić i zaimplementować za pomocą kodu, który mam obecnie? Elementy mają być zdefiniowane tak, jak mam to poniżej.
<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>
javascript
arrays
average
Jonathan Miller
źródło
źródło
var elmt = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
byłoby o wiele ładniejsze.Odpowiedzi:
Po prostu przeprowadź iterację przez tablicę, ponieważ twoje wartości są łańcuchami, muszą najpierw zostać przekonwertowane na liczbę całkowitą. A średnia to po prostu suma wartości podzielona przez liczbę wartości.
źródło
for(var i = 0; i < elmt.length; i++;)
zfor(var i = 0, l = elmt.length; i < l; i++)
sum += parseInt(elmt[i], 10);
zakładając, że wiąz [i] jest z podstawowego 10. linkRozwiązanie, które uważam za bardziej eleganckie:
źródło
sum/times.length
kroku):var avg = times.reduce(function(p,c,i){return p+(c-p)/(i+1)},0);
times.reduce((a,b) => (a+b)) / times.length;
ES6
źródło
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; };
NaN
.Obliczanie średniej (średniej) za pomocą funkcji redukuj i ES6:
źródło
generalnie średnia przy użyciu jednej linijki jest taka
specjalnie na zadane pytanie
wydajna wersja jest jak
Zrozumienie tablicy Javascript Redukcja w 1 minutę http://www.airpair.com/javascript/javascript-array-reduce
jak wskazał gotofritz, wydaje się, że Array.reduce pomija niezdefiniowane wartości. więc tutaj jest poprawka:
źródło
elements.length!=0?elements.length:1
można również napisać w ten sposób:elements.length || 1
który jest krótszy i łatwiejszy do odczytania.Wyobraźmy sobie, że mamy taką tablicę liczb całkowitych:
Średnią uzyskuje się za pomocą następującego wzoru
A = (1 / n) Σxi (gdzie i = 1 do n) ... Więc: x1 / n + x2 / n + ... + xn / n
Bieżącą wartość dzielimy przez liczbę wartości i dodajemy poprzedni wynik do zwracanej wartości.
Sygnatura metody to
Funkcja redukcji wywołania zwrotnego przyjmuje następujące parametry:
Drugi parametr redukcji jest wartością domyślną ... (używana w przypadku, gdy tablica jest pusta ).
Zatem średnia metoda redukcji będzie:
Jeśli wolisz, możesz utworzyć oddzielną funkcję
Następnie wystarczy odwołać się do sygnatury metody wywołania zwrotnego
Lub bezpośrednio rozszerz prototyp macierzy.
Wartość można podzielić za każdym razem, gdy wywoływana jest metoda redukcji.
Lub jeszcze lepiej , używając wcześniej zdefiniowanej Array.protoype.sum ()
metoda, zoptymalizuj proces moje wywołanie podziału tylko raz :)
Następnie na dowolnym obiekcie Array z zakresu:
NB: pusta tablica ze zwrotem życzenia NaN jest z mojego punktu widzenia bardziej poprawna niż 0 i może być przydatna w określonych przypadkach użycia.
źródło
Możesz także użyć lodash , _.sum (tablica) i _.mean (tablica) w części Math (masz też inne przydatne rzeczy).
źródło
Nie najszybszy, ale najkrótszy i w jednej linii używa map () i redukuj ():
źródło
[7,14,21].reduce((avg,e,i,arr)=>avg+e/arr.length,0);
ale z innym zachowaniem na pustej tablicy. Jeśli chcesz, aby wynik był pusty w pustej tablicy:[].reduce((a,e,i,arr)=>(a?a:0)+e/arr.length,"")
for (var avg = 0, length = i = arr.length; i--;) avg += arr[i] / length
Dużo wyraźniej, krócej i znacznie szybciejJeden podstępny sposób, w jaki możesz to zrobić, chociaż wymaga użycia (bardzo znienawidzonego) eval ().
Pomyślałem, że opublikuję to jako jedną z tych opcji „nieszablonowych”. Nigdy nie wiadomo, chytrość może przyznać ci (lub odebrać) punkt.
źródło
eval()
problemem, jaki widzę, jest to, że musisz mieć pewność, że tablica zawiera tylko liczby (co oczywiście dotyczy również wszystkich innych odpowiedzi tutaj). Wpisy nieliczbowe powodują awarię zReferenceError
lubSyntaxError, except nested arrays of numbers which introduce
, powodując niepoprawną sumę liczbową. I oczywiście w JS po stronie serwera, np. Node.js,eval()
może to oczywiście spowodować problemy z bezpieczeństwem. Ale wygląda to idealnie w przypadku dobrze zorganizowanych zastosowań po stronie klienta.eval()
- zobacz sekcję dotyczącą wydajności na stronie nczonline.net/blog/2013/06/25/eval-isnt-evil-just-misunderstoodUżywam tych metod w mojej osobistej bibliotece:
EDYCJA: Aby z nich skorzystać, po prostu poproś tablicę o jej sumę lub średnią, na przykład:
źródło
W przeglądarkach obsługujących ES6 ten polyfill może być pomocny.
Możesz dzielić tę samą metodę połączenia pomiędzy
Math.sum
,Math.avg
iMath.max
, jakmożesz użyć Math.sum jako
lub jeśli masz tablicę do podsumowania, możesz użyć
tak jak
źródło
Array.prototype
, myślę, że dodanie motywu doMath
obiektu jest lepszym wyborem - wszystkie są „programami obsługi liczb”.Oto krótki dodatek do obiektu „Math” w javascript, aby dodać do niego polecenie „średnia” !!
Następnie mam ten dodatek do obiektu „Math”, aby uzyskać sumę!
Więc wszystko, co robisz, to
I gdzie umieściłem tablicę symboli zastępczych, po prostu przekaż ją do swojej zmiennej (dane wejściowe, jeśli są liczbami, mogą być ciągiem, ponieważ analizuje je na liczbę!)
źródło
ustaw swój licznik pętli for na 0 .... otrzymujesz element 9 i gotowe, tak jak masz teraz. Pozostałe odpowiedzi to podstawowa matematyka. Użyj zmiennej do przechowywania sumy (musisz rzucić ciągi na liczby int) i podziel przez długość tablicy.
źródło
Zacznij od zdefiniowania wszystkich zmiennych, których planujemy używać. Zauważysz, że w przypadku
numbers
tablicy używam notacji dosłownej w[]
przeciwieństwie do metody konstruktoraarray()
. Ponadto używam krótszej metody, aby ustawić wiele zmiennych na 0.Następnie wypełniam moją pustą tablicę liczb wartościami od 0 do 11. Ma to na celu doprowadzenie mnie do pierwotnego punktu początkowego. Zwróć uwagę, jak naciskam na tablicę
count++
. Spowoduje to przesunięcie bieżącej wartości count, a następnie zwiększenie jej przy następnym razem.Na koniec wykonuję funkcję „dla każdego” z liczb w tablicy liczb. Ta funkcja będzie obsługiwać jedną liczbę naraz, którą identyfikuję jako „n” w treści funkcji.
Na koniec możemy przesłać zarówno
sum
wartość, jak iavg
wartość do naszej konsoli, aby zobaczyć wynik:Zobacz to w akcji online pod adresem http://jsbin.com/unukoj/3/edit
źródło
Opieram się tylko na odpowiedzi Abdennour TOUMI. oto powody, dla których:
1.) Zgadzam się z Bradem, uważam, że nie jest dobrym pomysłem przedłużanie obiektu, którego nie stworzyliśmy.
2.)
array.length
jest dokładnie niezawodny w javascript, wolę,Array.reduce
ponieważa=[1,3];a[1000]=5;
teraza.length
wróci1001
.źródło
Następnie :
źródło
W wiecznie zielonych przeglądarkach możesz używać funkcji strzałek
avg = [1,2,3].reduce((a,b) => (a+b);
Po uruchomieniu go 100 000 razy różnica czasu między podejściem pętli for i redukcją jest pomijalna.
źródło
console.time
&console.timeEnd
Średnia najkrótsza jedna wkładka:
Sum Shortest One Liner:
źródło
Tylko dla kopnięć:
źródło
Myślę, że możemy to zrobić
Używam parseFloat dwa razy, ponieważ jeśli 1) dodasz (a) 9 + b ("1") liczba, to wynik będzie "91", ale chcemy dodać. więc użyłem parseFloat
2) Gdy nastąpi dodanie (a) 9 + parseFloat ("1"), chociaż wynik będzie wynosił "10", ale będzie to łańcuch, którego nie chcemy, więc ponownie użyłem parseFloat.
Mam nadzieję, że wszystko jasne. Sugestie są mile widziane
źródło
Oto mój nowicjusz, aby po prostu znaleźć średni. Mam nadzieję, że to komuś pomoże.
źródło
oto twoja jedna wkładka:
źródło
Myślę, że może to być bezpośrednie rozwiązanie do obliczenia średniej za pomocą pętli for i funkcji.
źródło
Wydaje się, że istnieje nieskończona liczba rozwiązań, ale uznałem, że jest to zwięzłe i eleganckie.
Lub bardziej konsekwentnie:
W zależności od przeglądarki może być konieczne wykonanie jawnych wywołań funkcji, ponieważ funkcje strzałek nie są obsługiwane:
Lub:
źródło
Jeśli potrzebujesz średniej i możesz pominąć obliczanie sumy, możesz obliczyć średnią jednym wywołaniem redukcji:
źródło
Jeśli ktoś kiedykolwiek tego potrzebuje - oto średnia rekurencyjna.
W kontekście pierwotnego pytania możesz chcieć użyć średniej rekurencyjnej, jeśli pozwoliłeś użytkownikowi wstawić dodatkowe wartości i bez ponoszenia kosztów ponownego odwiedzenia każdego elementu, chciałeś „zaktualizować” istniejącą średnią.
W jaki sposób:
działa to poprzez utrzymanie bieżącej średniej i liczby elementów. Gdy ma zostać uwzględniona nowa wartość, należy zwiększyć liczbę o 1, skalować istniejącą średnią o
(count-1) / count
i dodaćnewValue / count
do średniej.Korzyści:
Wady:
BigNumber
źródło
Średnia zawartość HTML itens
Dzięki jQuery lub Javascriptowi
querySelector
masz bezpośredni dostęp do sformatowanych danych ... Przykład:Tak więc z jQuery masz
Zobacz inne 4 sposoby (!), Aby uzyskać dostęp do itens i uśrednić: http://jsfiddle.net/4fLWB/
źródło
var arr = [1, 2, 3, 4, 5]
avg (arr) ====== >>>> 3
Działa to z łańcuchami jako liczbami lub liczbami w tablicy.
źródło
źródło
Poleciłbym w tym przypadku D3. Jest najbardziej czytelny (i zapewnia 2 różne rodzaje średnich)
źródło