2017-11-08 25 views
1

Dies könnte doppelte Frage sein, aber ich konnte keine finden.Javascript - Entfernen Objektschlüssel nicht löschen

Ich möchte einen Schlüssel eines Objekts entfernen.

Bitte überprüfen Sie zuerst meine Geige.

Remove a key of an object

delete obj.something; 

Wenn Sie Konsole überprüfen, werden Sie das gleiche Objekt zu sehen, in der Lage ist, in der Konsole trotz nach dem ersten console.log löschen Verwendung gedruckt.

Warum das passiert?

Und was ist die beste Idee zum Entfernen eines Schlüssels eines Objekts?

Vielen Dank im Voraus.

+2

'löschen' * ist * wie Sie eine Objekteigenschaft entfernen, und in Ihrer Geige wird die Eigenschaft * * entfernt. Ich glaube, Sie werden durch das Verhalten der Konsole verwirrt: In einigen Browsern, wenn Sie ein Objekt "console.log()" verwalten, behält es eine Live-Verbindung zu dem Objekt und zu dem Zeitpunkt, als Sie auf den Pfeil klicken, um es zu erweitern, wurde die Eigenschaft entfernt . Versuchen Sie 'console.log (JSON.stringify (obj))' als einen Weg, um genau den Zustand des Objekts in diesem Moment zu protokollieren: https://jsfiddle.net/dvwgeb1o/2/. Beachten Sie auch, dass Ihre 'newObj'-Variable in der Geige nicht auf ein neues Objekt verweist, sondern eine zweite Referenz auf dasselbe Objekt wie' obj'. – nnnnnn

+0

@nnnnnn Sie haben Recht. Ich habe meine Geige so verändert. https://jsfiddle.net/Canet/dvwgeb1o/3/ Ich kann sehen, der Wert in neuen Parameter ist noch am Leben. Aber in meinem Projekt funktioniert das nicht. Ich verwende diesen Wert vor der Verwendung von delete in einen neuen Parameter, aber dieser neue Parameter hat nichts. Ich weiß nicht warum und das ist der Grund, warum ich einen anderen Weg finden will. Danke an deinen Kommentar. –

+1

Vielleicht sollten Sie die Frage bearbeiten, um den nicht funktionierenden Code zu zeigen, weil die Prämisse, dass 'delete' nicht funktioniert, nur falsch ist, und der Code in der Frage und Geige funktioniert gut. – nnnnnn

Antwort

1

Sie können versuchen obj[key] = undefined;. Es ist etwa 100 mal schneller, nach: How do I remove a property from a JavaScript object?

+0

Das entfernt die Eigenschaft jedoch nicht wirklich, es weist nur einen neuen Wert zu. So werden 'for..in' Schleifen,' Object.keys (obj) 'usw. immer noch die Eigenschaft sehen. – nnnnnn

+0

@nnnnnn Ja. Dies ist nicht zum Entfernen von Schlüssel, nur Wert undefiniert machen. –

1

können Sie Spread-Operatoren verwenden, um Schlüssel zu entfernen.

let obj = {a:1, b:2, c:3} 
const {a, ...restObj} = obj; // this will make restObj with deleted a key. 

Diese Methode ist besonders nützlich im Umgang mit unveränderlichen Typen. Auf diese Weise würden Sie das ursprüngliche Objekt nicht mutieren und immer noch ein Objekt mit gelöschtem Schlüssel erhalten.

+0

Das ist gut für ein kleines Objekt, oder? –

+0

Diese Methode ist definitiv langsamer als die 'delete' Methode. Weil es hier zwei Zuweisungen gibt, eine für 'a' und eine für' ... restObj'. Aber es ist nützlich, wenn Sie Ihr ursprüngliches Objekt erhalten wollen (Unveränderlichkeit). Das sagte, JA !! Es ist gut für kleine Objekte – Prasanna

+0

Dann kann ich das nicht benutzen .. In meinem ursprünglichen Code ist echtes Objekt riesig, weil es von http Anruf ist. Aber danke für deinen Vorschlag. :) –

Verwandte Themen