• 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

0 głosów
1,028 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 579 wizyt
pytanie zadane 22 kwietnia 2021 w C i C++ przez xTMx3 Obywatel (1,560 p.)
0 głosów
1 odpowiedź 559 wizyt
pytanie zadane 25 kwietnia 2022 w JavaScript przez Klaudiaaa Początkujący (390 p.)
0 głosów
1 odpowiedź 2,205 wizyt

93,741 zapytań

142,677 odpowiedzi

323,294 komentarzy

63,323 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...