Behalten nur bestimmte Eigenschaften in einem JavaScript-Objekt

8

Ich habe ein Objekt. Ich möchte das Objekt ändern (nicht klonen), indem ich alle Eigenschaften mit Ausnahme bestimmter Eigenschaften lösche. Zum Beispiel, wenn ich mit diesem Objekt angefangen habe:

%Vor%

und möchte nur die Eigenschaften p1, p2 und p100, wie kann ich dieses Objekt erhalten:

%Vor%

Ich verstehe, wie ich das mit roher Gewalt tun könnte, aber ich möchte eine elegantere Lösung.

    
user1032531 05.03.2014, 15:59
quelle

9 Antworten

2

Initialisieren Sie das Objekt einfach neu:

%Vor%

Eine andere Möglichkeit besteht darin, bestimmte Eigenschaften zu löschen, was weniger effektiv ist:

%Vor%     
VisioN 05.03.2014, 16:01
quelle
3
___ answer22202905 ___

Sie könnten %code% :

verwenden %Vor%

Eine Alternative zu %code% :

%Vor%

Kürzere:

%Vor%

Array zu RegExp:

%Vor%

Nützlich mit einer Funktion:

%Vor%

Verwendung:

%Vor%

Sie mögen keine regulären Ausdrücke, möchten aber dennoch eine kugelsichere Lösung:

%Vor%

Verwendung:

%Vor%

Nun, ich könnte so unendlich weitermachen, aber es ist Zeit zu essen.

    
___ answer22202827 ___

Initialisieren Sie das Objekt einfach neu:

%Vor%

Eine andere Möglichkeit besteht darin, bestimmte Eigenschaften zu löschen, was weniger effektiv ist:

%Vor%     
___ qstntxt ___

Ich habe ein Objekt. Ich möchte das Objekt ändern (nicht klonen), indem ich alle Eigenschaften mit Ausnahme bestimmter Eigenschaften lösche. Zum Beispiel, wenn ich mit diesem Objekt angefangen habe:

%Vor%

und möchte nur die Eigenschaften p1, p2 und p100, wie kann ich dieses Objekt erhalten:

%Vor%

Ich verstehe, wie ich das mit roher Gewalt tun könnte, aber ich möchte eine elegantere Lösung.

    
___ qstnhdr ___ Behalten nur bestimmte Eigenschaften in einem JavaScript-Objekt ___ answer22202892 ___
%Vor%

Ссылка

    
___ answer22211490 ___

Ein Objekt, das in einer Variablen namens %code% :

gespeichert ist %Vor%

Eine neue Referenz auf dieses Objekt:

%Vor%

%code% und %code% beziehen sich beide auf das gleiche Objekt:

%Vor%

Aktualisieren wir das Objekt durch %code% :

%Vor%

Aktualisieren wir das Objekt durch %code% :

%Vor%

Wie Sie sehen können, sind %code% und %code% synchron.

Lass uns " %code% :" neu initialisieren:

%Vor%

%code% und %code% beziehen sich jetzt auf verschiedene Objekte:

%Vor%

Aktualisieren wir das in %code% gespeicherte Objekt:

%Vor%

Aktualisieren wir das in %code% gespeicherte Objekt:

%Vor%

Wie Sie sehen können, sind %code% und %code% nicht mehr synchron.

Die Frage ist: Wollen Sie beide Variablen ( %code% und %code% ) synchronisiert halten? Wenn ja, ist der zweite Codeblock der VisioN-Antwort der richtige. Andernfalls wählen Sie den ersten Codeblock.

>     
___ answer41900949 ___

Dies war der erste Treffer beim googlen 'js nur bestimmte Schlüssel behalten', also könnte ein Update wert sein.

Die eleganteste Lösung ist möglicherweise die Verwendung von underscore.js

%Vor%     
___ answer43106873 ___

Lodash hat eine Funktion namens %code% was das tut, was du beschreibst. Ich weiß, dass das Hinzufügen einer Bibliothek nicht ideal ist, aber Sie können auch Funktionen auswählen, wenn Sie Bundles usw. verwenden.

%Vor%     
___ answer22203747 ___

Übergeben Sie eine Karte von Whitelist-Schlüsseln an einen IIFE (sofort aufgerufener Funktionsausdruck); nicht nur elegant, sondern auch flexibel IMO (vor allem, wenn man sich in eine Funktion bewegt, die nicht anders ist als in Juan Mendes 'Antwort)

%Vor%     
___ tag123javascript ___ JavaScript (nicht zu verwechseln mit Java) ist eine dynamische Sprache mit mehreren Paradigmen auf hoher Ebene, die sowohl für das clientseitige als auch für das serverseitige Scripting verwendet wird. Verwenden Sie dieses Tag für Fragen zu ECMAScript und seinen verschiedenen Dialekten / Implementierungen (außer ActionScript und Google-Apps-Script). ___ answer22203547 ___

Ich nehme an, Sie könnten dem Prototyp eine neue Methode hinzufügen:

%Vor%

Geige .

    
___ answer22203526 ___

Sie könnten eine Ansicht auf Ihr erstes Objekt erstellen, eine Art Proxy, die nur die gewünschten Eigenschaften im Blick behält.
Die folgende Funktion erstellt beispielsweise eine Ansicht, die das Lesen und Schreiben des zugrunde liegenden Objekts ermöglicht, wobei nur die ausgewählten Eigenschaften beibehalten werden.
Sie können es sehr einfach lesen, indem Sie einfach den Setter entfernen.
Vielleicht möchten Sie auch das Proxy-Objekt versiegeln, damit ich keine spätere Änderung daran vornehmen kann.

%Vor%

Ein Anwendungsbeispiel wäre:

%Vor%

Hier reflektiert objView die gewünschten Eigenschaften von myObj. Sie können sich die kleine jsbin anschauen, die ich hier gemacht habe:

Ссылка

Ergebnisse:

%Vor%

beachte das:
1) Sie können ein Objekt durch seine Ansicht überschreiben und nur die gewünschten Eigenschaften beibehalten.
2) Sie können in einer versteckten Eigenschaft / in einer Schließung das ursprüngliche Objekt speichern, so dass Sie später die Eigenschaften ändern können, die Sie verfügbar machen.

    
___
Alf 29.03.2017 18:06
quelle
2

Sie könnten delete :

verwenden %Vor%

Eine Alternative zu indexOf :

%Vor%

Kürzere:

%Vor%

Array zu RegExp:

%Vor%

Nützlich mit einer Funktion:

%Vor%

Verwendung:

%Vor%

Sie mögen keine regulären Ausdrücke, möchten aber dennoch eine kugelsichere Lösung:

%Vor%

Verwendung:

%Vor%

Nun, ich könnte so unendlich weitermachen, aber es ist Zeit zu essen.

    
leaf 05.03.2014 16:04
quelle
1
%Vor%

Ссылка

    
Juan Mendes 05.03.2014 16:04
quelle
1

Ein Objekt, das in einer Variablen namens o :

gespeichert ist %Vor%

Eine neue Referenz auf dieses Objekt:

%Vor%

o und p beziehen sich beide auf das gleiche Objekt:

%Vor%

Aktualisieren wir das Objekt durch o :

%Vor%

Aktualisieren wir das Objekt durch p :

%Vor%

Wie Sie sehen können, sind o und p synchron.

Lass uns " o :" neu initialisieren:

%Vor%

o und p beziehen sich jetzt auf verschiedene Objekte:

%Vor%

Aktualisieren wir das in o gespeicherte Objekt:

%Vor%

Aktualisieren wir das in p gespeicherte Objekt:

%Vor%

Wie Sie sehen können, sind o und p nicht mehr synchron.

Die Frage ist: Wollen Sie beide Variablen ( o und p ) synchronisiert halten? Wenn ja, ist der zweite Codeblock der VisioN-Antwort der richtige. Andernfalls wählen Sie den ersten Codeblock.

>     
leaf 05.03.2014 23:16
quelle
1

Lodash hat eine Funktion namens pick was das tut, was du beschreibst. Ich weiß, dass das Hinzufügen einer Bibliothek nicht ideal ist, aber Sie können auch Funktionen auswählen, wenn Sie Bundles usw. verwenden.

%Vor%     
Grant 30.03.2017 01:21
quelle
0

Ich nehme an, Sie könnten dem Prototyp eine neue Methode hinzufügen:

%Vor%

Geige .

    
Andy 05.03.2014 16:31
quelle
0

Übergeben Sie eine Karte von Whitelist-Schlüsseln an einen IIFE (sofort aufgerufener Funktionsausdruck); nicht nur elegant, sondern auch flexibel IMO (vor allem, wenn man sich in eine Funktion bewegt, die nicht anders ist als in Juan Mendes 'Antwort)

%Vor%     
George Jempty 05.03.2014 16:39
quelle
0

Sie könnten eine Ansicht auf Ihr erstes Objekt erstellen, eine Art Proxy, die nur die gewünschten Eigenschaften im Blick behält.
Die folgende Funktion erstellt beispielsweise eine Ansicht, die das Lesen und Schreiben des zugrunde liegenden Objekts ermöglicht, wobei nur die ausgewählten Eigenschaften beibehalten werden.
Sie können es sehr einfach lesen, indem Sie einfach den Setter entfernen.
Vielleicht möchten Sie auch das Proxy-Objekt versiegeln, damit ich keine spätere Änderung daran vornehmen kann.

%Vor%

Ein Anwendungsbeispiel wäre:

%Vor%

Hier reflektiert objView die gewünschten Eigenschaften von myObj. Sie können sich die kleine jsbin anschauen, die ich hier gemacht habe:

Ссылка

Ergebnisse:

%Vor%

beachte das:
1) Sie können ein Objekt durch seine Ansicht überschreiben und nur die gewünschten Eigenschaften beibehalten.
2) Sie können in einer versteckten Eigenschaft / in einer Schließung das ursprüngliche Objekt speichern, so dass Sie später die Eigenschaften ändern können, die Sie verfügbar machen.

    
GameAlchemist 05.03.2014 16:30
quelle

Tags und Links