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

30voto

Willem Punkte 1032

Es gibt eine Menge guter Antworten hier, aber ich möchte nur in chime, dass bei der Verwendung von löschen, um eine Eigenschaft in JavaScript zu entfernen, ist es oft klug, zunächst prüfen, ob diese Eigenschaft existiert, um Fehler zu vermeiden.

z.B.

var obj = {"property":"value", "property2":"value"};

if (obj && obj.hasOwnProperty("property2")) {
  delete obj.property2;
} else {
  //error handling
}

Aufgrund der dynamischen Natur von JavaScript gibt es oft Fälle, in denen man einfach nicht weiß, ob die Eigenschaft existiert oder nicht. Die Prüfung, ob obj vor dem && existiert, stellt auch sicher, dass Sie keinen Fehler durch den Aufruf der Funktion hasOwnProperty() für ein undefiniertes Objekt erhalten.

Es tut mir leid, wenn dies nicht zu Ihrem speziellen Anwendungsfall passt, aber ich glaube, dass dies ein gutes Design ist, das bei der Verwaltung von Objekten und ihren Eigenschaften angepasst werden sollte.

26voto

talsibony Punkte 7888

Dieser Beitrag ist sehr alt und ich finde es sehr hilfreich, so dass ich beschlossen, die unset-Funktion, die ich schrieb, für den Fall, dass jemand anderes sehen diesen Beitrag und denken, warum es nicht so einfach wie es in PHP unset-Funktion.

Der Grund für die Erstellung dieses neuen unset Funktion, ist es, den Index aller anderen Variablen in dieser Hash_map zu behalten. Schauen Sie sich das folgende Beispiel an und sehen Sie, wie sich der Index von "test2" nach dem Entfernen eines Wertes aus der Hash_map nicht geändert hat.

function unset(unsetKey, unsetArr, resort) {
  var tempArr = unsetArr;
  var unsetArr = {};
  delete tempArr[unsetKey];
  if (resort) {
    j = -1;
  }
  for (i in tempArr) {
    if (typeof(tempArr[i]) !== 'undefined') {
      if (resort) {
        j++;
      } else {
        j = i;
      }
      unsetArr[j] = tempArr[i];
    }
  }
  return unsetArr;
}

var unsetArr = ['test', 'deletedString', 'test2'];

console.log(unset('1', unsetArr, true)); // output Object {0: "test", 1: "test2"}
console.log(unset('1', unsetArr, false)); // output Object {0: "test", 2: "test2"}

20voto

Amio.io Punkte 19007

Verwendung von ramda#dissoc erhalten Sie ein neues Objekt ohne das Attribut regex :

const newObject = R.dissoc('regex', myObject);
// newObject !== myObject

Sie können auch andere Funktionen verwenden, um denselben Effekt zu erzielen - auslassen, auswählen, ...

19voto

Mohammed Safeer Punkte 19013

Versuchen Sie die folgende Methode. Weisen Sie die Object Eigenschaftswert zu undefined . Dann stringify das Objekt und parse .

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

myObject.regex = undefined;
myObject = JSON.parse(JSON.stringify(myObject));

console.log(myObject);

16voto

johndavedecano Punkte 492

Verwendung von Lodash

import omit from 'lodash/omit';

const prevObject = {test: false, test2: true};
// Removes test2 key from previous object
const nextObject = omit(prevObject, 'test2');

Verwendung von Ramda

R.omit(['a', 'd'], {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, c: 3}

0 Stimmen

Seltsam. Ihr Code _.omit(['a', 'd'], {a: 1, b: 2, c: 3, d: 4}); hat bei mir nicht funktioniert, stattdessen _.omit({a: 1, b: 2, c: 3, d: 4}, ['a', 'd']); hat funktioniert.

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