• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Usuwanie duplikatów z listy po wczytaniu ajaxem

Object Storage Arubacloud
0 głosów
433 wizyt
pytanie zadane 28 grudnia 2016 w JavaScript przez Boshi VIP (100,240 p.)
zamknięte 31 stycznia 2017 przez Boshi

Mam takie kod

         $.get("{{ path('Trainer') }}", {'id': categoryID}, function (data) {
                        $.each(data, function (i, value) {
                            $("#Trenerzy").append($('<option></option>').text(value.user.name).attr('value', value.user.id))

                        });
                    });

 

Kod ten pobiera ajaxem 3 obiekty z bazy i ładuje do listy. Problem w tym, że po załadowaniu listy, dodaje mi dwa razy jedno i to samo id użytkownika.  Np Trenerem jest Janek i Paweł. W tym Paweł prowadzi 2x zajęcia. Więc chciałbym by w liście był Janek i Paweł a nie 2x Paweł. Po prostu wystarczy jakoś usunąć duplikaty z listy.  Próbowałem wiele rozwiązań z SO i żaden nie działa.

 

Fragment zwracanych obiektów. Fragment, bo jest tam jeszcze dołączony obiekt user itd

[{"id":37,"title":"Zdarzenie1","start":"2016-12-27T11:30:00Z","end":"2016-12-27T14:00:00Z","allDay":null,"max":10,"isEventEnabled":true }]

efekt po załadowaniu;

https://gyazo.com/e2847e00ab029214904e346c67b27201

p.s struktura nie może się zmienić.

komentarz zamknięcia: Rozwiązane, odpowiedź dla potomnych
komentarz 28 grudnia 2016 przez xmentor Nałogowiec (49,520 p.)

Hmm, no to piszemy funkcje:

Twój kod, który podaleś w pierwszym poście lekko zmodyfikujemy:

$.get("{{ path('Trainer') }}", {'id': categoryID}, function (data) {
    $.each(data, function (i, value) {
        $("#Trenerzy").append($(`<option value='${value.user.id}' class='person'>${value.user.name}</option>`));
     });
});

Przed tym dodamy naszą funkcje:

function duplicat(value) {
    const persons = $('.person'),
          len = persons.length;
    let result = true;
    if(len < 1) {
        result = false;
    } else {
        for (let i = 0; i < len; i++) {
            if (persons[i].value === value) {
                result = true;
                break;
            } else {
                result = false;
            }
        }
    }
    return result;
}

Funkcja ma znajdować się nad Twoim kodem, który teraz powinien wyglądać tak:

$.get("{{ path('Trainer') }}", {'id': categoryID}, function (data) { 
    $.each(data, function (i, value) {
        if(duplicat(value.user.id)) {
            //alert dla testu
            alert('Znaleziono trenera o tym samym ID');
        } else {
            $("#Trenerzy").append($(`<option value='${value.user.id}' class='person'>${value.user.name}</option>`));
        }
    });
});

 

komentarz 29 grudnia 2016 przez Boshi VIP (100,240 p.)
Niestety kompletnie nie wykrywa duplikatu. Dalej ląduje 2x to samo id do value.
komentarz 29 grudnia 2016 przez xmentor Nałogowiec (49,520 p.)
$("#Trenerzy").append($(`<option value='${value.user.id}' class='person'>${value.user.name}</option>`));

Tą linijke też podmieniłeś?

komentarz 29 grudnia 2016 przez Boshi VIP (100,240 p.)
Tak, wszystko podmieniłem.  value.user.id się zgadza.
komentarz 29 grudnia 2016 przez xmentor Nałogowiec (49,520 p.)
Kurde, to nie wiem co może być nie tak. Debuguj wszystko.

1 odpowiedź

0 głosów
odpowiedź 31 stycznia 2017 przez Boshi VIP (100,240 p.)
Dla potomnych...

sprawdzam, czy już istnieje taki element w liście i jeżeli tak to po prostu nic nie robi, w innym wypadku dodaje. Ważne, żę zmienną trzeba na stringa przekonwertować bo inaczej nie zlapie.

 

if ($("#Trenerzy option[value="+value.user.id.toString()+"]").length == 0)

Podobne pytania

+1 głos
0 odpowiedzi 162 wizyt
pytanie zadane 22 kwietnia 2021 w C i C++ przez xTMx3 Obywatel (1,560 p.)
0 głosów
1 odpowiedź 260 wizyt
pytanie zadane 25 kwietnia 2022 w JavaScript przez Klaudiaaa Początkujący (390 p.)
0 głosów
1 odpowiedź 1,346 wizyt

92,554 zapytań

141,399 odpowiedzi

319,535 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...