2015-09-12 8 views
6

In JavaScript kann ich ein Objekt der Schlüssel mitJavaScript - Integrierte Funktion zum Löschen mehrerer Schlüssel in einem Objekt?

delete myObject[myKey];

Manchmal löschen, muss ich schon einige Schlüssel löschen, aber alle Werte in der übergeordneten Schlüssel, der die Schlüssel kapseln ich löschen möchte nicht .

Gibt es eine effiziente Möglichkeit, mehrere Schlüssel mit einer Zeile zu löschen? Etwas, das wie folgt aussieht:

multiDelete myObject[keyOne, keyTwo, keyThree];

+0

Efficient aus welcher Perspektive? Die Verwendung von 'delete' ist in erster Linie ineffizient. – zerkms

+0

* aber nicht alle Werte im übergeordneten Schlüssel, die die Schlüssel einschließen, die ich löschen möchte * Könnten Sie das klären? Was meinst du mit "Elternschlüssel" oder "kapsle die Schlüssel"? –

Antwort

2

Es gibt keine integrierte Funktion ist, aber eine, wie Sie es tun können, ist die multidelete Methode zum Objekt Prototyp hinzuzufügen. Es ist vielleicht ein bisschen übertrieben, aber Sie könnten es nützlich finden.

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

var obj = { a: 1, b: 2, c: 3, d: 4, e: 5 }; 

obj.multidelete('c', 'e'); // { a: 1, b: 2, d: 4 }; 

DEMO

+0

Wenn Sie Argumente wie diese Schleife durchlaufen wollen, müssen Sie sie nicht zuerst trennen. Auch "aufzählbar" und "konfigurierbar" sind standardmäßig auf "falsch" gesetzt und müssen nicht explizit angegeben werden. –

10

Hier ist ein Einzeiler ähnlich dem, was Sie anfordern.

var obj = {a: 1, b: 2, c: 3, d: 4, e: 5 }; 

['c', 'e'].forEach(e => delete obj[e]); 

// obj is now {a:1, b:2, d:4} 
2

Es gibt keine in js Funktion aufgebaut ist noch mehrere Schlüssel zu löschen, können Sie jede Bibliothek für dieses wie underscore.js, dies zu tun.

_.omit({name: 'moe', age: 50, userid: 'moe1'}, 'userid'); 
=> {name: 'moe', age: 50} 

//or you can use function to filter keys 

_.omit({name: 'moe', age: 50, userid: 'moe1'}, function(value, key, object){ 
    return _.isNumber(value); 
}); 
=> {name: 'moe', userid: 'moe1'} 
Verwandte Themen