JS Remove Option

09/22/2020 13:15 MaLLaH95#1
Hallo, Com
ich will mit Javascript doppelte Einträge entfernen, auf Stack Overflow habe ich ein Script gefunden was mit Option funktioniert.
Ich habe jetzt allerdings ein Problem, ich will keine Option benutzen und wollte Fragen, ob einer mir eventuell helfen kann?

<a class="dropdown-item" data-chat-filter="" data-select="TEST" href="#">TEST</a>
3 sollen gelöscht werden weil 4 gleiche vorhanden sind und 1 Soll bleiben
(mithilfe einer id oder den Namen/Value TEST)

Code:
                                <div class="dropdown mr-2">
                                    <button class="btn btn-outline-default dropdown-toggle" type="button" data-chat-filter-list="" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" >
                                        All Chats
                                    </button>
                                    <div name="company" class="dropdown-menu" style="overflow: auto;max-height: 400px;">
                                        <a class="dropdown-item" data-chat-filter="" data-select="all-chats" href="#">All Chats</a>
                                        <a class="dropdown-item" data-chat-filter="" data-select="TEST" href="#">TEST</a>
                                        <a class="dropdown-item" data-chat-filter="" data-select="TEST" href="#">TEST</a>
                                        <a class="dropdown-item" data-chat-filter="" data-select="TEST" href="#">TEST</a>
                                        <a class="dropdown-item" data-chat-filter="" data-select="TEST" href="#">TEST</a>
                                        <a class="dropdown-item" data-chat-filter="" data-select="TEST2" href="#">TEST2</a>
                                        <a class="dropdown-item" data-chat-filter="" data-select="TEST3" href="#">TEST3</a>
                                    </div>
                                </div>
Code:
var usedNames = {};
$("select[name='company'] > option").each(function () {
    if(usedNames[this.text]) {
        $(this).remove();
    } else {
        usedNames[this.text] = this.value;
    }
});
09/22/2020 14:31 lnqlorlouz#2
Mir war langweilig, hier eine von mehreren Lösungen:
Code:
        const data = document.querySelectorAll("a[data-select]");
        const uniqueElements = [];
        data.forEach(el => {
            if (uniqueElements.find(element => element.getAttribute("data-select") === el.getAttribute("data-select"))) {
                el.remove();
            } else {
                uniqueElements.push(el);
            }
        });
Wenn du auf jQuery stehst, kannst du es auch so machen:
Code:
var usedNames = {};
        $("a[data-select]").each(function () {
            if (usedNames[this.text]) {
                $(this).remove();
            } else {
                usedNames[this.text] = this.getAttribute("data-select");
            }
        });
Damit du nächstes mal weißt, wonach du suchen musst, um dein jQuery Skript umzuschreiben:
- [Only registered and activated users can see links. Click Here To Register...]
- [Only registered and activated users can see links. Click Here To Register...]

Btw. würde ich sowas eigentlich auf Serverseite prüfen, ob nicht schon ein Eintrag vorhanden ist. Wenn du Zugriff auf die Datenbank hast, kannst die Spalte einfach UNIQUE machen.