„FED25 Array Deduplication“ JavaScript-Praxis und wie man beurteilt, ob eine Variable NaN ist

Themenbeschreibung

Fügen Sie eine Methode hinzu, um Duplikate für das Array-Objekt zu entfernen

Beispiel:

Import: [false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN]

Ausgabe: [false, true, undefined, null, NaN, 0, 1, {}, {}, 'a']

antworten

  • Die Verwendung der Eigenschaften von Objekten in Set ermöglicht das Speichern eindeutiger WerteSet  jeglicher Art (seien es primitive Werte oder Objektreferenzen).  Sowohl als auch   können in einem Satz gespeichert werden  und werden als derselbe Wert behandelt (NaN wird als gleich angesehen, obwohl NaN !== NaN). Verwenden Sie dann Array.from(), um das Array zu erstellen. NaNundefinedNaN

    Array.from() Array-Objekte können auf folgende Weise erstellt werden:

    Pseudo-Array-Objekte (  length beliebige Objekte mit einer Eigenschaft und mehreren indizierten Eigenschaften)

    Iterierbares Objekt (Sie können die Elemente im Objekt abrufen, z. B. Map und Set usw.)

Array.prototype.uniq = function () {
    return Array.from(new Set(this))
}
  • Durchlaufen Sie das Array, fügen Sie Elemente zum neuen Array hinzu und beurteilen Sie, ob sie beim Hinzufügen hinzugefügt wurden. Hinweis: ①NaN ist mit nichts gleich, einschließlich sich selbst; ②var objA = {}; var objB = {};  console.log(objA == objB); ist auch nicht gleich, aber der Titel muss nicht entfernt werden; ③arr[i ]= {};arr. indexOf(arr[i]) == i.

        1. Beim Traversieren prüfen, ob das aktuelle Element in seinem eigenen Element gefunden werden kann Da NaN nicht gleich sich selbst ist, kann es nicht gefunden werden, also wenn arr.indexOf(arr[i]) = -1 bedeutet dies, dass NaN angetroffen wird. Da NaN dedupliziert werden muss, wenn es wiederholt wird, wird der Flag-Wert hinzugefügt, um zu bestimmen, ob NaN hinzugefügt wurde.

Array.prototype.uniq = function () {
    var args = this;
    var len = args.length;
    var result = [];
    var flag = true;
    for (var i = 0; i < len; i++) {
        if (args.indexOf(args[i]) != -1) { //NaN不等于任何,包括他自身,所以args.indexOf(args[i])遇到NaN永远返回-1
            if (i === args.indexOf(args[i])) {
                result.push(args[i]);
            }
        } else if (flag) {
            result.push(args[i]);
            flag = false;
        }
    }
    return result
}

        2. Verwenden Sie die eingebaute Methode von JavaScript, um zu bestimmen, ob Element a NaN ist. Es gibt zwei Möglichkeiten, NaN zu beurteilen:

isNaN(a):isNaN()  Wenn der Parameter kein Number-Typ ist, wird der Parameter zuerst in Number konvertiert. Wenn er also direkt verwendet wird, wird er auch true zurückgeben, wenn eine Zeichenfolge übergeben wird, dh  isNaN('str'); // true .

Object.is(a, NaN): Kann nur NaN erkennen

Array.prototype.uniq = function () {
    var arr = this;
    var result = [];
    var len = arr.length;
    var flag = true
    for (var i = 0; i < len; i++) {
        var type = typeof arr[i]
        if (flag && Object.is(arr[i], NaN)) {
            result.push(arr[i]);
            flag = false;
        } else if (result.indexOf(arr[i]) == -1 && !Object.is(arr[i], NaN)) {
            result.push(arr[i]);
        }
    }
    return result;
}

Supongo que te gusta

Origin blog.csdn.net/qq_42101569/article/details/126525304
Recomendado
Clasificación