web-dev-qa-db-de.com

Mehrere Objekteigenschaften löschen?

Ich erstelle ein Objekt mit mehreren Eigenschaften -

var objOpts = {
  option1: 'Option1',
  option2: 'Option2',
  option2: 'Option3'
};

Ich füge später noch weitere Eigenschaften hinzu -

objOpts.option4 = 'Option4'
objOpts.option5 = 'Option5'

Ich bin dann mit den beiden zuletzt erstellten Eigenschaften fertig ('Option4' und 'Option5') und möchte beide löschen/löschen.

Momentan würde ich es so machen -

delete objOpts.option4
delete objOpts.option5

Gibt es eine andere Möglichkeit, dies zu tun? Stellen Sie sich vor, ich hätte 5 weitere Eigenschaften hinzugefügt und musste alle löschen oder löschen. Dies wären fünf Zeilen mit fast identischem "Löschcode"

23
Stefano

Ich bin sicher, Sie versuchen, einem Objekt benutzerdefinierte Eigenschaften hinzuzufügen.

Ein einfacher Weg, den ich vorschlagen würde, ist das Erstellen einer Sub-Eigenschaft:

objOpts.custom.option4 = 'Option4'
objOpts.custom.option5 = 'Option5'

auf diese Weise könnten Sie delete objOpts.custom und damit fertig werden. Beachten Sie, dass Sie nach diesem Schritt objOpts.custom = {} neu erstellen müssen.

Darüber hinaus würde sich dieser Weg auch näher an OOP anfühlen, da sich Ihre öffentlichen Immobilien leicht von privaten unterscheiden könnten.

Wenn Sie mit dem Löschen von Objekten in JavaScript beginnen, möchte ich auf einen hervorragend geschriebenen Artikel zum Thema verweisen: http://perfectionkills.com/understanding-delete/

Sie könnten mit den Meta-Eigenschaften herumspielen, um Eigenschaften vor dem Löschen usw. zu schützen (um einen noch besseren Codierungsfluss für Ihren Fall zu schaffen).

EDIT: 

Ich möchte das hinzufügen, anstatt die Eigenschaft zu löschen und neu zu erstellen, können Sie einfach objOpts.custom = {} sagen, wodurch option4 und option5 aus dem Speicher (eventuell über Garbage Collection) freigegeben werden.

8
Sunny R Gupta

Es gibt eine einfache Lösung mit der Bibliothek lodash.

Die _.omit-Funktion nimmt Ihr Objekt und ein Array von Schlüsseln, die Sie entfernen möchten, und gibt ein neues Objekt mit allen Eigenschaften des ursprünglichen Objekts mit Ausnahme der im Array genannten zurück. 

Dies ist eine ordentliche Methode zum Entfernen von Schlüsseln, da Sie damit ein neues Objekt erhalten und das ursprüngliche Objekt unberührt bleibt. Dies vermeidet das Problem der Mutation, bei der, wenn wir die Schlüssel im ursprünglichen Objekt entfernt haben, alle anderen Teile des Codes, die dieses Objekt verwenden, dazu neigen, Fehler in den Code zu brechen oder einzuführen. 

Beispiel

var obj = {x:1, y:2, z:3};
var result = _.omit(obj, ['x','y']);
console.log(result);

//Output
result = {z:3};

Link zur Dokumentation desselben hier klicken

23
Akshat Gupta

Eine Möglichkeit besteht darin, eine separate Funktion zu erstellen, die Ihr Objekt und Ihre Eigenschaften als Argument verwendet.

Js Geigenbeispiel

Code auch weiter unten:

var objOpts = {
  option1: 'Option1',
  option2: 'Option2',
  option3: 'Option3',
  option4: 'Option4'
};

/** 
 * Method for removing object properties
 *
 */
var removeObjectProperties = function(obj, props) {

    for(var i = 0; i < props.length; i++) {
        if(obj.hasOwnProperty(props[i])) {
            delete obj[props[i]];
        }
    }

};

// remove
removeObjectProperties(objOpts, ["option1", "option2"]);

// objOpts - after
console.log(objOpts);
8
Mauno Vähä

ES6 bietet dazu eine elegante Lösung: Rest in Object Destructuring:

let {a, b, ...rest} = { a: 10, b: 20, c: 30, d: 40 };
console.log(rest); // { c: 30, d: 40 }

Beachten Sie, dass das ursprüngliche Objekt dadurch nicht verändert wird, aber manche Leute finden das trotzdem wertvoll.

Ref: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

6
Stephen Paul

Ich würde auch eine modernere Methode als Mauno Vänä anbieten:

function deleteProps (obj, prop) {
    for (let p of prop) 
        (p in obj) && (delete obj[p]);
}

Beispiel:

// Create sample object
const myObject = {
    a: 'Foo',
    b: 'Baa',
    c: 'Oof'
};

// Prints: {a: "Foo", b: "Baa", c: "Oof"}
console.log(myObject);

// Delete props
deleteProps(myObject, ['a', 'b']);

// Prints: {c: "Oof"}
console.log(myObject);
2
Simon
var obj = {"key1":1,"key2":2,"key3":3,"key4":4};

if (!('multidelete' in Object.prototype)) {
Object.defineProperty(Object.prototype, 'multidelete', {
    value: function () {
        for (var i = 0; i < arguments.length; i++) {
            delete this[arguments[i]];
        }
    }
});
}

obj.multidelete("key1","key3");

Auf diese Weise können Sie mehrere Schlüssel in einem Objekt löschen

0
Yogesh Katkar
Object.keys(object).forEach((prop) => delete object[prop]);
0
wilsonpage