![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 0 Dołączył: 11.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Proszę o pomoc w sumowaniu elementów tablicy w JS jQuery. Tworzę dynamicznie tablicę array z pliku JSON, która ma 3 elementy: index, element.A, element.B. Wartość A i B pobierana jest z pliku JSON. Tablica jest dynamiczna tzn. co sekundę dopisywany jest nowy "rekord" aż do 142, a następnie najstarszy z niej wypada. Tak więc w danej sekundzie "rekordów" jest zawsze 142. Chciałbym na bieżąco liczyć i wyświetlać w konsoli sumę wartość pola element.B wszystkich 142 rekordów. Napisałem taki kod, ale nie działa: Kod <script type="text/javascript"> $(function demo() { $.ajax({ type: 'GET', url: 'demo.php', dataType: 'json', success: function (data){ $.each(data, function(index, element) { var array = [index, element.A, element.B]; /* Chciałbym liczyć sumę kolejnych wartości pola element.B */ $.each(array,function(){sum+=parseFloat(element.B) || 0;}); /* I wyświetlać sumę w konsoli */ console.log(sum); }); } }); setTimeout(demo, 1000); }); </script> Pozdrawiam zbysiusp |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 0 Dołączył: 11.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję za link, ale problem jest chyba inny:
Tablica wygląda tak: [index, data, wartosc] [1, 2016-07-15 10:26, 100] po sekundzie [2, 2016-07-15 10:27, 200] po sekundzie [3, 2016-07-15 10:28, 300] po sekundzie ... Chcę w zmiennej sum uzyskać wartość: 100+200+300 (zlicznie "w pionie"). |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Najpierw musisz zaimplementować kolejkę FIFO i wrzucać do niej co sekundę elementy.
Dopiero potem możesz zająć się liczeniem sumy jak w przykładzie, który podałem, chyba, że struktura będzie inna - choć nie sądzę. -------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Zamiast liczyć sumę za każdym razem modyfikuj ją: w momencie dopisywania wiersza dodawaj jego wartość, w momencie usuwania wiersza odejmuj jego wartość.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 0 Dołączył: 11.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Zaczynam dopiero z JS. Doradź proszę jak zmienić kod (implementacja kolejki), który podałem w pierwszym poście. Pokazuje kolejne rekordy dopisywane w terminalu tylko sumy brak.
Zamiast liczyć sumę za każdym razem modyfikuj ją: w momencie dopisywania wiersza dodawaj jego wartość, w momencie usuwania wiersza odejmuj jego wartość. Jak to zapisać w kodzie? Podaj proszę przykład. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
http://stackoverflow.com/a/4774081/5889778
Dodaj do kodu podaną tam również funkcję sum.
-------------------- |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 0 Dołączył: 11.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Elementy są już wrzucane do tablicy co sekundę.
Kod $.each(data, function(index, element) { Chcę tylko sumować jedną kolumnę w pętli na zasadzie: 1. var sum=0 2. sum = sum+element.B 3. console.log(sum) Ten post edytował zbysiusp 15.07.2016, 10:49:13 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Kod poniższy nie ma związku z wrzucaniem elementów do tablicy, służy on iteracji na tablicy.
Z tego co piszesz (post #3) co sekundę otrzymujesz paczkę danych, która nie jest tablicą, lecz pojedynczym obiektem. -------------------- |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 0 Dołączył: 11.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Kod poniższy nie ma związku z wrzucaniem elementów do tablicy, służy on iteracji na tablicy. Z tego co piszesz (post #3) co sekundę otrzymujesz paczkę danych, która nie jest tablicą, lecz pojedynczym obiektem. Dokładnie tak. Tablicę tworzę ja bo sądziłem, że po każdej sekundowej paczce danych pozostanie wartość, którą zsumuję z wartością z następnej paczki itd. Czy to oznacza, że sumowanie danych ze 142 kolejnych paczek jest niemożliwe? |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Jest możliwe, ale fragment kodu, który podałeś jest niepotrzebny.
Funkcja success zwraca zmienną data, która jest sparsowaną odpowiedzią JSON (zakładam, że to zwracasz w PHP). Otrzymujesz więc obiekt JS. Tak więc zależnie od tego jak wygląda dokładnie zmienna data, pobierasz z jej indeksu wartość do sumy i sumujesz. Tyle, że musisz zadbać o to, aby przy 142-gim elemencie odjąć od sumy wypadający element (rozwiązanie phpion) lub skorzystać z kolejki (rozwiązanie, które podałem). -------------------- |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 0 Dołączył: 11.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Jest możliwe, ale fragment kodu, który podałeś jest niepotrzebny. Funkcja success zwraca zmienną data, która jest sparsowaną odpowiedzią JSON (zakładam, że to zwracasz w PHP). Otrzymujesz więc obiekt JS. Tak więc zależnie od tego jak wygląda dokładnie zmienna data, pobierasz z jej indeksu wartość do sumy i sumujesz. Tyle, że musisz zadbać o to, aby przy 142-gim elemencie odjąć od sumy wypadający element (rozwiązanie phpion) lub skorzystać z kolejki (rozwiązanie, które podałem). console.log(data) Co z tym zrobić dalej? Ten post edytował zbysiusp 15.07.2016, 11:34:10 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
To jest wartość zmiennej data otrzymanej przy jednokrotnym wywołaniu żądania Ajax, czyli to co otrzymujesz w jednej sekundzie?
Tam jest 100 obiektów, nie 1. -------------------- |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 0 Dołączył: 11.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
To jest wartość zmiennej data otrzymanej przy jednokrotnym wywołaniu żądania Ajax, czyli to co otrzymujesz w jednej sekundzie? Tam jest 100 obiektów, nie 1. Dokładnie tak! Wywołanie jednorazowe: Kod $.each(data, function(index, element) {} Tylko co sekundę zmienia się zawartość tej paczki o jedną wartość. Dane pochodzą z pliku JSON: JSON źródło Ten post edytował zbysiusp 15.07.2016, 11:46:25 |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
-------------------- |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 0 Dołączył: 11.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Bardzo dziękuję! Jesteś Wielki! O to chodziło. Działa świetnie. KLIKAM POMÓGŁ! Pozwolę sobie zapytać Cię o jeszcze jedną rzecz bo znasz moją strukturę data. Czy jest możliwość uzyskania na bieżąco maksymalnej i minimalnej wartości rainfall_10 z danej paczki: (console.log(max), console.log(min)? Ten post edytował zbysiusp 15.07.2016, 12:11:28 |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
-------------------- |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 0 Dołączył: 11.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
BARDZO DZIĘKUJĘ!
Czy można kliknąć wiele razy pomógł? Do pełni szczęścia JS-owego brakuje mi ostatniej rzeczy. Chciałbym aby obok wartości min i max ukazała się data (przekazana w tej samej paczce), przy której te wartości odnotowano. Czy jest to możliwe? Ten post edytował zbysiusp 15.07.2016, 12:24:04 |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Musisz inaczej szukać min i max: http://stackoverflow.com/a/33043619/5889778
-------------------- |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 0 Dołączył: 11.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Musisz inaczej szukać min i max: http://stackoverflow.com/a/33043619/5889778 Rozumiem, że trzeba zrobić tablicę z dwoma powiązanymi elementami: data, wartość? Nie jest więc możliwe odczytanie innego parametru obiektu np. data, id po znalezieniu w nim maksymalnej wartości? |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 8.07.2025 - 08:30 |