Das Entfernen doppelter Werte aus einem JavaScript-Array kann eine häufige Aufgabe sein, insbesondere wenn mit Daten gearbeitet wird, die möglicherweise redundante Einträge enthalten. Abhängig von der Art Ihrer Daten und Leistungsaspekten gibt es mehrere Ansätze, um dies effektiv zu erreichen.
Diese Methode nutzt den integrierten Set-Konstruktor und den Spread Syntax zum Erstellen eines neuen Arrays, das nur eindeutige Werte aus dem ursprünglichen Array enthält:
const uniq = [...new Set(array)];
Dieser Ansatz verwendet die Methode filter(), um das Array zu durchlaufen und zu prüfen, ob das erste Vorkommen jedes Elements mit seiner aktuellen Position innerhalb des Arrays übereinstimmt. Elemente mit nicht übereinstimmenden Positionen gelten als Duplikate:
const uniqueArray = a.filter((item, pos) => a.indexOf(item) === pos);
Hashtabellen bieten eine effiziente Möglichkeit, doppelte Elemente mithilfe von Schlüssel-Wert-Paaren zu erkennen. Bei diesem Ansatz wird jedes Element zu einer Hashtabelle hinzugefügt und das Vorhandensein eines Elements wird sofort überprüft:
function uniq(a) { const seen = {}; return a.filter((item) => { return seen.hasOwnProperty(item) ? false : (seen[item] = true); }); }
Um die Vorteile der beiden vorherigen zu kombinieren Ansätze verwendet diese Lösung Hashtabellen für Grundwerte und eine lineare Suche nach Objekten:
function uniq(a) { const prims = { boolean: {}, number: {}, string: {} }, objs = []; return a.filter((item) => { const type = typeof item; if (type in prims) return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true); else return objs.indexOf(item) >= 0 ? false : objs.push(item); }); }
Das Sortieren des Arrays vor dem Entfernen von Duplikaten kann den Prozess vereinfachen:
function uniq(a) { return a.sort().filter((item, pos, ary) => !pos || item != ary[pos - 1]); }
Wenn Sie Duplikate basierend auf einem bestimmten Kriterium entfernen müssen, B. eine Eigenschaft eines Objekts, können Sie der uniqBy()-Methode eine Rückruffunktion bereitstellen:
function uniqBy(a, key) { const seen = {}; return a.filter((item) => { const k = key(item); return seen.hasOwnProperty(k) ? false : (seen[k] = true); }); }
Wenn Sie nur das erste oder letzte Vorkommen doppelter Objekte behalten möchten, können Sie die Datenstrukturen Set oder Map verwenden:
function uniqByKeepFirst(a, key) { const seen = new Set(); return a.filter((item) => { const k = key(item); return seen.has(k) ? false : seen.add(k); }); } function uniqByKeepLast(a, key) { return [...new Map(a.map((x) => [key(x), x])).values()]; }
Das obige ist der detaillierte Inhalt vonWie entferne ich doppelte Werte effizient aus einem JavaScript-Array?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!