Heim >Web-Frontend >js-Tutorial >Wie entferne ich doppelte Werte effizient aus einem JavaScript-Array?

Wie entferne ich doppelte Werte effizient aus einem JavaScript-Array?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-20 13:00:26693Durchsuche

How to Efficiently Remove Duplicate Values from a JavaScript Array?

Doppelte Werte aus einem JS-Array entfernen

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.

Verwendung des Set-Konstruktors und der Spread-Syntax

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)];

„Smart“, aber naiv way

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 zur Rettung

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);
  });
}

Das Beste aus zwei Welten

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);
  });
}

Sortieren | uniq

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]);
}

Einzigartig nach...

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);
  });
}

Zuerst oder zuletzt?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn