7548 Stimmen

Wie kann ich eine Eigenschaft aus einem JavaScript-Objekt entfernen?

Angenommen, ich erstelle ein Objekt wie folgt:

let myObject = {
  "ircEvent": "PRIVMSG",
  "method": "newURI",
  "regex": "^http://.*"
};

Wie sollte ich die Immobilie entfernen? regex um am Ende mit neuen myObject wie folgt?

let myObject = {
  "ircEvent": "PRIVMSG",
  "method": "newURI"
};

0 Stimmen

Delete myObject.regex; // oder, delete myObject['regex']; // oder, var prop = "regex"; delete myObject[prop];

54voto

John Slegers Punkte 41127

Angenommen, Sie haben ein Objekt, das wie folgt aussieht:

var Hogwarts = {
    staff : [
        'Argus Filch',
        'Filius Flitwick',
        'Gilderoy Lockhart',
        'Minerva McGonagall',
        'Poppy Pomfrey',
        ...
    ],
    students : [
        'Hannah Abbott',
        'Katie Bell',
        'Susan Bones',
        'Terry Boot',
        'Lavender Brown',
        ...
    ]
};

Löschung einer Objekteigenschaft

Wenn Sie die gesamte staff Array, der richtige Weg, um dies zu tun, wäre, dies zu tun:

delete Hogwarts.staff;

Alternativ können Sie auch dies tun:

delete Hogwarts['staff'];

In ähnlicher Weise würde das Entfernen des gesamten Schüler-Arrays durch den Aufruf von delete Hogwarts.students; o delete Hogwarts['students']; .

Löschen eines Array-Index

Wenn Sie nun einen einzelnen Mitarbeiter oder Schüler entfernen möchten, ist das Verfahren etwas anders, da beide Eigenschaften selbst Arrays sind.

Wenn Sie den Index Ihres Mitarbeiters kennen, können Sie dies einfach tun:

Hogwarts.staff.splice(3, 1);

Wenn Sie den Index nicht kennen, müssen Sie auch eine Indexsuche durchführen:

Hogwarts.staff.splice(Hogwarts.staff.indexOf('Minerva McGonnagall') - 1, 1);

Nota

Technisch gesehen können Sie zwar delete für ein Array zu verwenden, würde dazu führen, dass man falsche Ergebnisse erhält, wenn man zum Beispiel Hogwarts.staff.length später. Mit anderen Worten, delete würde das Element entfernen, aber es würde den Wert von length Eigentum. Verwendung von delete würde auch Ihre Indizierung durcheinander bringen.

Wenn Sie also Werte aus einem Objekt löschen, überlegen Sie immer zuerst, ob es sich um Objekteigenschaften oder um Array-Werte handelt, und wählen Sie je nach dem die geeignete Strategie.

Wenn Sie damit experimentieren möchten, können Sie Folgendes verwenden diese Fiedel als Ausgangspunkt.

43voto

emil Punkte 5524

Ich persönlich benutze Underscore.js o Lodash für Objekt- und Array-Manipulation:

myObject = _.omit(myObject, 'regex');

40voto

Alireza Punkte 92209

Verwendung von löschen Methode ist der beste Weg, um das zu tun. Laut MDN-Beschreibung entfernt der delete-Operator eine Eigenschaft aus einem Objekt. Sie können also einfach schreiben:

delete myObject.regex;
// OR
delete myObject['regex'];

Der delete-Operator entfernt eine bestimmte Eigenschaft aus einem Objekt. Bei erfolgreicher Löschung gibt er true zurück, andernfalls wird false zurückgegeben. Es ist jedoch wichtig, die folgenden Szenarien zu berücksichtigen:

  • Wenn die Eigenschaft, die Sie zu löschen versuchen, nicht existiert, löschen Sie keine Wirkung und gibt true zurück

  • Wenn eine Eigenschaft mit demselben Namen im Prototyp des Objekts vorhanden ist Kette des Objekts existiert, wird das Objekt nach dem Löschen die Eigenschaft aus der Prototypenkette (mit anderen Worten, das Löschen wirkt sich nur auf eigene Eigenschaften).

  • Jede mit var deklarierte Eigenschaft kann nicht aus dem globalen Bereich oder aus dem Bereich einer Funktion gelöscht werden.

  • Daher kann delete keine Funktionen im globalen Bereich löschen (unabhängig davon, ob es sich um einen Teil einer Funktionsdefinition oder einer Funktion (Ausdruck) handelt).

  • Funktionen, die Teil eines Objekts sind (mit Ausnahme der
    globalen Bereich) kann mit delete gelöscht werden.

  • Jede mit let oder const deklarierte Eigenschaft kann nicht aus dem Bereich, in dem sie definiert wurde, gelöscht werden. Nicht-konfigurierbare Eigenschaften können nicht entfernt werden. Dazu gehören Eigenschaften von eingebauten Objekten wie Math, Array, Object und Eigenschaften, die mit Methoden wie Object.defineProperty() als nicht konfigurierbar erstellt werden.

Der folgende Ausschnitt zeigt ein weiteres einfaches Beispiel:

var Employee = {
      age: 28,
      name: 'Alireza',
      designation: 'developer'
    }

    console.log(delete Employee.name);   // returns true
    console.log(delete Employee.age);    // returns true

    // When trying to delete a property that does 
    // not exist, true is returned 
    console.log(delete Employee.salary); // returns true

Weitere Informationen und weitere Beispiele finden Sie unter dem unten stehenden Link:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete

37voto

Ran Turner Punkte 8004

Es gibt eine Reihe von Möglichkeiten, Eigenschaften aus einem Objekt zu entfernen:

  1. Entfernen mithilfe eines Punkt-Eigenschafts-Accessors

    const myObject = { "ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*", };

    delete myObject.regex; console.log(myObject);

  2. Entfernen mit eckigen Klammern Eigenschaft Accessor

    const myObject = { "ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*", };

    delete myObject['regex']; console.log(myObject); // or const name = 'ircEvent'; delete myObject[name]; console.log(myObject);

  3. Eine andere Möglichkeit, jedoch auf unveränderliche Weise, ohne das ursprüngliche Objekt zu verändern, ist die Verwendung von Objektdestrukturierung und Rest-Syntax.

    const myObject = { "ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*", };

    const { regex, ...myObjectRest} = myObject; console.log(myObjectRest);

35voto

kind user Punkte 34477

Eine andere Lösung, bei der Array#reduce .

var myObject = {
  "ircEvent": "PRIVMSG",
  "method": "newURI",
  "regex": "^http://.*"
};

myObject = Object.keys(myObject).reduce(function(obj, key) {
  if (key != "regex") {           //key you want to remove
    obj[key] = myObject[key];
  }
  return obj;
}, {});

console.log(myObject);

Sie wird jedoch mutieren das ursprüngliche Objekt. Wenn Sie ein neues Objekt erstellen möchten ohne die angegebene Taste, weisen Sie die Reduktionsfunktion einfach einer neuen Variablen zu, z. B.:

(ES6)

const myObject = {
  ircEvent: 'PRIVMSG',
  method: 'newURI',
  regex: '^http://.*',
};

const myNewObject = Object.keys(myObject).reduce((obj, key) => {
  key !== 'regex' ? obj[key] = myObject[key] : null;
  return obj;
}, {});

console.log(myNewObject);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X