Ich habe ein Objekt:
myObject = { 'a': 1, 'b': 2, 'c': 3 }
Ich suche nach einer nativen Methode, die der folgenden ähnelt Array.prototype.map
:
newObject = myObject.map(function (value, label) {
return value * value;
});
// newObject is now { 'a': 1, 'b': 4, 'c': 9 }
Hat JavaScript eine solche map
Funktion für Objekte? (Ich möchte dies für Node.JS, daher interessieren mich browserübergreifende Probleme nicht.)
javascript
node.js
functional-programming
map-function
Zufälliges Blau
quelle
quelle
Object.keys
, die keine genau definierte Reihenfolge haben. Das kann problematisch sein, ich schlageObject.getOwnPropertyNames
stattdessen vor.Object.keys
und konsistentObject.getOwnPropertyNames
. Siehe developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Object.keys
ist implementierungsabhängig. Siehe stackoverflow.com/a/30919039/1529630Antworten:
map
DasObject
Objekt ist nicht nativ , aber wie wäre es damit:Sie können jedoch problemlos über ein Objekt iterieren, indem Sie Folgendes verwenden
for ... in
:Aktualisieren
Viele Leute erwähnen, dass die vorherigen Methoden kein neues Objekt zurückgeben, sondern das Objekt selbst bearbeiten. Im Übrigen wollte ich eine weitere Lösung hinzufügen, die ein neues Objekt zurückgibt und das ursprüngliche Objekt unverändert lässt:
Array.prototype.reduce
reduziert ein Array auf einen einzelnen Wert, indem der vorherige Wert mit dem aktuellen Wert zusammengeführt wird. Die Kette wird durch ein leeres Objekt initialisiert{}
. Bei jeder Iteration wird ein neuer Schlüssel vonmyObject
mit dem doppelten Schlüssel als Wert hinzugefügt.Aktualisieren
Mit den neuen ES6-Funktionen können Sie eleganter ausdrücken
objectMap
.quelle
map
richtig verwendet, weil sie nicht funktioniertreturn
- sie missbraucht,map
als wäre es einforEach
Anruf. Wenn er es tatsächlich tat,return myObject[value] * 2
wäre das Ergebnis ein Array, das die ursprünglichen Werte verdoppelt, anstelle eines Objekts, das die ursprünglichen Schlüssel mit doppelten Werten enthält, wobei letzteres eindeutig das ist, was das OP verlangt hat..reduce
Beispiel ist in Ordnung, aber meiner Meinung nach bleibt es weit hinter der Bequemlichkeit eines.map
for Objects zurück, da Ihr.reduce
Rückruf nicht nur der Funktionsweise entsprechen muss.reduce
, sondern auch erfordert,myObject
dass er im lexikalischen Bereich verfügbar ist. Insbesondere letzteres macht es unmöglich, nur eine Funktionsreferenz im Rückruf zu übergeben, und erfordert stattdessen eine direkte anonyme Funktion.Wie wäre es mit einem Einzeiler mit sofortiger Variablenzuweisung in einfachem JS ( ES6 / ES2015 )?
Verwenden des Spread-Operators und der berechneten Schlüsselnamensyntax :
jsbin
Eine andere Version mit reduzieren:
jsbin
Erstes Beispiel als Funktion:
jsbin
Wenn Sie ein verschachteltes Objekt rekursiv in einem funktionalen Stil zuordnen möchten , gehen Sie folgendermaßen vor:
jsbin
Oder zwingender: so:
jsbin
Seit ES7 / ES2016 können Sie
Object.entries()
stattObject.keys()
zB folgendes verwenden:ES2019 eingeführt
Object.fromEntries()
, was dies noch weiter vereinfacht:Vererbte Eigenschaften und die Prototypkette:
In einigen seltenen Fällen , müssen Sie möglicherweise eine abzubilden Klasse ähnlichen Objekt , das Eigenschaften eines geerbten Objekt auf seiner hält Prototyp-Kette . In solchen Fällen
Object.keys()
funktioniertObject.keys()
dies nicht , da geerbte Eigenschaften nicht aufgelistet werden. Wenn Sie geerbte Eigenschaften zuordnen müssen, sollten Sie verwendenfor (key in myObj) {...}
.Hier ist ein Beispiel für ein Objekt, das die Eigenschaften eines anderen Objekts erbt und wie
Object.keys()
es in einem solchen Szenario nicht funktioniert.jsbin
Bitte tun Sie mir jedoch einen Gefallen und vermeiden Sie die Vererbung . :-)
quelle
Object.keys
überrascht , dass ererbte Eigenschaften nicht aufgezählt werden. Ich schlage vor, Sie fügen eine Warnung hinzu.Object.entries({a: 1, b: 2, c: 3})
.(o, f)
als Argumente, aber verwendenobj
im Körper.Object.assign(...Object.entries(obj).map(([k, v]) => ({[k]: v * v})))
funktioniert nicht, wennobj
es sich um ein leeres Objekt handelt. Wechseln zu :Object.assign({}, ...Object.entries(obj).map(([k, v]) => ({[k]: v * v})))
.Keine nativen Methoden, aber lodash # mapValues macht den Job hervorragend
quelle
Object.entries({a: 1, b: 2, c: 3})
, um ein Array zu erhalten._.map()
damit Sie den Schlüssel als zweites Argument erhalten - wie vom OP gefordert._.mapValues()
liefert auch den Schlüssel als 2. Argument. Auch_.map()
würde hier nicht funktionieren, da es nur Arrays zurückgibt, keine Objekte:_.map({ 'a': 1, 'b': 2, 'c': 3}, n => n * 3) // [3, 6, 9]
Es ist ziemlich einfach, eine zu schreiben:
mit Beispielcode:
Hinweis: In dieser Version können Sie (optional) den
this
Kontext für den Rückruf festlegen , genau wie bei derArray
Methode.BEARBEITEN - geändert, um die Verwendung von zu entfernen
Object.prototype
, um sicherzustellen, dass keine mit einer im Objekt genannten Eigenschaft kollidiertmap
.quelle
map
, aber ich muss sagen, dass das ÄndernObject.prototype
nicht gut zu mir passt, auch wenn es nicht aufzählbar ist.Object.prototype
außer dem (theoretischen) Kollisionsrisiko mit anderen Methoden nichts zu ändern . FWIW, ich kann nicht verstehen, wie die andere Antwort so viele Stimmen bekommen hat wie sie hat, es ist völlig falsch.o = {map: true, image: false}
. Sie riskieren es nur zu schreibeno.map(fn)
stattmap(o,fn)
Sie können
Object.keys
und dannforEach
über das zurückgegebene Array von Schlüsseln verwenden:Oder modularer:
Beachten Sie, dass
Object.keys
ein Array zurückgegeben wird, das nur die eigenen aufzählbaren Eigenschaften des Objekts enthält. Daher verhält es sich wie einefor..in
Schleife mit einerhasOwnProperty
Prüfung.quelle
Dies ist gerade bs, und jeder in der JS-Community weiß es. Es sollte diese Funktionalität geben:
Hier ist die naive Implementierung:
es ist super nervig, das die ganze zeit selbst umsetzen zu müssen;)
Wenn Sie etwas Anspruchsvolleres wünschen, das die Object-Klasse nicht beeinträchtigt, versuchen Sie Folgendes:
Es ist jedoch sicher, diese Zuordnungsfunktion zu Object hinzuzufügen. Fügen Sie sie nur nicht zu Object.prototype hinzu.
quelle
Object
Objekt hinzu? Einfach habenconst mapObject = (obj, fn) => { [...]; return ret; }
..map
aber allgemein als Functor-Schnittstelle verstanden, und es gibt keine einheitliche Definition von Functor für "Objekt", da praktisch alles in Javascript ein Objekt sein kann, einschließlich Dinge mit eigenen, sehr unterschiedlichen und definierten .map-Schnittstellen / Logik.Ich bin hierher gekommen, um ein Objekt einem Array zuzuordnen und zu beantworten, und habe diese Seite als Ergebnis erhalten. Falls Sie hierher gekommen sind, um nach der gleichen Antwort zu suchen, die ich erhalten habe, können Sie hier ein Array zuordnen und Einwände erheben.
Sie können map verwenden, um ein neues Array vom Objekt wie folgt zurückzugeben:
quelle
Object.values(myObject)
Die akzeptierte Antwort hat zwei Nachteile:
Array.prototype.reduce
, weil Reduzieren Mittel zum Ändern der Struktur eines zusammengesetzten Typs bedeutet, was in diesem Fall nicht der Fall ist.Ein funktionaler Ansatz für ES6 / ES2015
Bitte beachten Sie, dass alle Funktionen in Curryform definiert sind.
o
wird neu zugewiesen. Da Javascript Referenzwerte durch Freigabe übergibt , wird eine flache Kopie vono
generiert. Wir sind jetzt in der Lage,o
innerhalb zu mutieren,omap
ohneo
im übergeordneten Bereich zu mutieren .map
der Rückgabewert ignoriert, damap
eine Mutation von ausgeführt wirdo
. Da dieser Nebeneffektomap
im übergeordneten Bereich verbleibt und nicht sichtbar ist, ist er völlig akzeptabel.Dies ist nicht die schnellste, sondern eine deklarative und wiederverwendbare Lösung. Hier ist die gleiche Implementierung wie bei einer einzeiligen, prägnanten, aber weniger lesbaren Implementierung:
Nachtrag - Warum sind Objekte standardmäßig nicht iterierbar?
ES2015 spezifizierte den Iterator und die iterierbaren Protokolle. Objekte sind jedoch immer noch nicht iterierbar und daher nicht abbildbar. Der Grund ist das Mischen von Daten und Programmebene .
quelle
Array.prototype.reduce
. Ich möchte hier nur veranschaulichen, dass die akzeptierte Antwort irgendwie "missbraucht"Array.prototype.reduce
und wie ein rein funktionales Mapping implementiert werden könnte. Wenn Sie nicht an funktionaler Programmierung interessiert sind, ignorieren Sie einfach meine Antwort.fold
ist allgemeiner als amap
(Funktor). Dies war jedoch mein Wissen ab Mitte 2016. Das ist eine halbe Ewigkeit: DJavaScript hat gerade die neue
Object.fromEntries
Methode bekommen.Beispiel
Erläuterung
Der obige Code konvertiert das Objekt in ein verschachteltes Array (
[[<key>,<value>], ...]
), das Sie zuordnen können.Object.fromEntries
konvertiert das Array zurück in ein Objekt.Das Coole an diesem Muster ist, dass Sie jetzt beim Zuordnen problemlos Objektschlüssel berücksichtigen können.
Dokumentation
Object.fromEntries()
Object.entries()
Browser-Unterstützung
Object.fromEntries
wird derzeit nur von diesen Browsern / Engines unterstützt , es sind jedoch Polyfills verfügbar (zB @ babel / polyfill ).quelle
Object.fromEntries
ist das Gegenteil vonObject.entries
.Object.entries
konvertiert ein Objekt in eine Liste von Schlüssel-Wert-Paaren.Object.fromEntries
konvertiert eine Liste von Schlüssel-Wert-Paaren in ein Objekt.Minimale Version (es6):
quelle
Object.entries(obj).reduce((a, [k, v]) => [a[k] = v * v, a], {})
, spitze Klammern anstelle von Klammern.Object.entries(obj).reduce((a, [k, v]) => {a[k] = v * v; return a}, {})
Object.entries().reduce
ist die beste Lösung, die ich mit ES6 + denke. Würde mehr Upvotes bekommen, wenn es einereturn
Aussage im Reduzierer anstelle vonimplicit return
undcomma
Operator verwenden würde - was ordentlich, aberFür maximale Leistung.
Wenn sich Ihr Objekt nicht oft ändert, aber häufig wiederholt werden muss, empfehle ich die Verwendung einer nativen Karte als Cache.
Object.entries funktioniert bereits in Chrome, Edge, Firefox und Beta Opera und ist daher zukunftssicher. Es ist von ES7, also füllen Sie es mit https://github.com/es-shims/Object.entries für IE, wo es nicht funktioniert.
quelle
const fn = v => v * 2; const newObj = Object.entries(myObject).reduce((acc, [k,v]) => Object.assign({}, acc, {[k]: fn(v)}), {});
Sie können die
map
Methode undforEach
Arrays verwenden, aber wenn Sie sie verwenden möchten,Object
können Sie sie mit dem folgenden Twist verwenden:Verwenden von Javascript (ES6)
Verwenden von jQuery
Oder Sie können andere Schleifen wie die folgende
$.each
Methode verwenden: Beispiel:quelle
$
ist jquery?Das
map function
gibt es auf dem nicht,Object.prototype
aber Sie können es so emulierenquelle
typeof callback === 'function'
absolut überflüssig. 1)map
hat ohne Rückruf keine Bedeutung 2) Wenn diescallback
nicht funktioniert, wird Ihremap
Implementierung nur ohne Bedeutung für die for-Schleife ausgeführt. AuchObject.prototype.hasOwnProperty.call( obj, key )
ist ein bisschen übertrieben.Ich bin darauf als erstes Element in einer Google-Suche gestoßen, als ich versuchte, dies zu lernen, und dachte, ich würde es anderen Leuten mitteilen, die kürzlich die Lösung gefunden haben, die das unveränderliche npm-Paket verwendet.
Ich denke, es ist interessant zu teilen, da unveränderlich die EXAKTE Situation des OP in seiner eigenen Dokumentation verwendet - das Folgende ist nicht mein eigener Code, sondern stammt aus der aktuellen Dokumentation von unveränderlichem js:
Nicht, dass Seq andere Eigenschaften hat ("Seq beschreibt eine verzögerte Operation, die es ihnen ermöglicht, die Verwendung aller Erfassungsmethoden höherer Ordnung (wie Map und Filter) effizient zu verketten, indem keine Zwischensammlungen erstellt werden") und einige andere unveränderliche js-Daten Strukturen könnten die Arbeit auch recht effizient erledigen.
Jeder, der diese Methode verwendet, muss
npm install immutable
und möchte möglicherweise die folgenden Dokumente lesen:https://facebook.github.io/immutable-js/
quelle
BEARBEITEN: Der kanonische Weg mit neueren JavaScript-Funktionen ist -
Wo
o
ist ein Objekt undf
ist Ihre Mapping-Funktion. Oder wir könnten sagen, wenn eine Funktion vona -> b
und ein Objekt mit Werten vom Typ gegeben sinda
, erzeugen wir ein Objekt mit Werten vom Typb
. Als Pseudotyp-Signatur -Die ursprüngliche Antwort wurde geschrieben, um einen leistungsstarken Kombinator zu demonstrieren,
mapReduce
der es uns ermöglicht, unsere Transformation auf andere Weise zu betrachtenm
, die Zuordnungsfunktion - gibt Ihnen die Möglichkeit, das eingehende Element zu transformieren, bevor…r
, die Reduktionsfunktion - Diese Funktion kombiniert den Akkumulator mit dem Ergebnis des abgebildeten ElementsErstellt intuitiv
mapReduce
einen neuen Reduzierer, an den wir direkt anschließen könnenArray.prototype.reduce
. Noch wichtiger ist jedoch, dass wir unsere Objektfunktor-Implementierungomap
einfach implementieren können, indem wir das ObjektmonoidObject.assign
und verwenden{}
.Beachten Sie, dass der einzige Teil des Programms, den wir tatsächlich schreiben mussten, die Mapping-Implementierung selbst ist -
Das heißt, wenn ein bekanntes Objekt
o
und ein Schlüssel gegeben sindk
, konstruieren Sie ein Objekt, dessen berechnete Eigenschaftk
das Ergebnis des Aufrufsf
des Schlüsselwerts isto[k]
.Wir bekommen einen Einblick in
mapReduce
das Sequenzierungspotential, wenn wir zuerst abstrahierenoreduce
Alles funktioniert gleich,
omap
kann aber jetzt auf einer höheren Ebene definiert werden. NatürlichObject.entries
macht das Neue das albern, aber die Übung ist für den Lernenden immer noch wichtig.Sie werden hier nicht das volle Potenzial
mapReduce
sehen, aber ich teile diese Antwort, weil es interessant ist zu sehen, an wie vielen Stellen sie angewendet werden kann. Wenn Sie daran interessiert sind, wie es abgeleitet wird und auf welche Weise es nützlich sein könnte, lesen Sie bitte diese Antwort .quelle
Map
undMap.entries
, OK: D. Ich bin es leid, einfache Objekte als Kartendatentypen zu missbrauchen.Map
sollte verwendet werden, wo / wenn möglich, aber es ersetzt nicht vollständig die Notwendigkeit, diese Verfahren für einfache JS-Objekte zu verwenden, obwohl: DBasierend auf der Antwort von @Amberlamps ist hier eine Utility-Funktion (als Kommentar sah sie hässlich aus)
und die Verwendung ist:
quelle
quelle
enumerable
Standardmäßigfalse
Meine Antwort basiert größtenteils auf der am höchsten bewerteten Antwort hier und hoffentlich versteht jeder (habe die gleiche Erklärung auch auf meinem GitHub). Deshalb funktioniert seine Implementierung mit der Karte:
Der Zweck der Funktion besteht darin, ein Objekt zu nehmen und den ursprünglichen Inhalt des Objekts mithilfe einer Methode zu ändern, die allen Objekten (Objekten und Arrays gleichermaßen) zur Verfügung steht, ohne ein Array zurückzugeben. Fast alles in JS ist ein Objekt, und aus diesem Grund können Elemente weiter unten in der Vererbungspipeline möglicherweise technisch diejenigen verwenden, die für diejenigen auf der ganzen Linie verfügbar sind (und umgekehrt, wie es scheint).
Der Grund dafür ist, dass die .map-Funktionen ein Array zurückgeben, das erfordert, dass Sie eine explizite oder implizite RETURN eines Arrays angeben, anstatt einfach ein vorhandenes Objekt zu ändern. Sie täuschen das Programm im Wesentlichen vor, das Objekt sei ein Array, indem Sie Object.keys verwenden, mit dem Sie die Map-Funktion verwenden können, die auf die Werte einwirkt, denen die einzelnen Schlüssel zugeordnet sind (ich habe Arrays tatsächlich versehentlich zurückgegeben, aber behoben). Solange es keine Rückkehr im normalen Sinne gibt, wird kein Array erstellt, bei dem das ursprüngliche Objekt noch intakt ist und wie programmiert geändert wird.
Dieses spezielle Programm nimmt ein Objekt namens images und nimmt die Werte seiner Schlüssel und hängt URL-Tags zur Verwendung in einer anderen Funktion an. Original ist das:
... und modifiziert ist dies:
Die ursprüngliche Struktur des Objekts bleibt erhalten, sodass ein normaler Zugriff auf die Eigenschaft möglich ist, solange keine Rückgabe erfolgt. Lassen Sie es NICHT wie gewohnt ein Array zurückgeben, und alles wird gut. Das Ziel ist es, die ursprünglichen Werte (Bilder [Schlüssel]) dem zuzuordnen, was gewünscht wird, und nicht irgendetwas anderem. Soweit ich weiß, MUSS eine Neuzuordnung von Bildern [Schlüssel] und keine implizite oder explizite Aufforderung zur Rückgabe eines Arrays erfolgen, um eine Array-Ausgabe zu verhindern (die Variablenzuweisung tut dies und war für mich ein Fehler).
BEARBEITEN:
Gehen Sie auf seine andere Methode zur Erstellung neuer Objekte ein, um zu vermeiden, dass das ursprüngliche Objekt geändert wird (und eine Neuzuweisung scheint weiterhin erforderlich zu sein, um zu vermeiden, dass versehentlich ein Array als Ausgabe erstellt wird). Diese Funktionen verwenden die Pfeilsyntax und sind, wenn Sie einfach ein neues Objekt für die zukünftige Verwendung erstellen möchten.
Die Funktionsweise dieser Funktionen ist wie folgt:
mapFn übernimmt die Funktion, die später hinzugefügt wird (in diesem Fall (Wert) => Wert) und gibt einfach alles, was dort gespeichert ist, als Wert für diesen Schlüssel zurück (oder multipliziert mit zwei, wenn Sie den Rückgabewert wie er ändern) in mapFn ( obj) [Schlüssel],
und definiert dann den ursprünglichen Wert neu, der dem Schlüssel in result [key] = mapFn (obj) [key] zugeordnet ist.
und gibt die Operation zurück, die für das Ergebnis ausgeführt wurde (der Akkumulator in den Klammern, die am Ende der .reduce-Funktion ausgelöst wurden).
All dies wird für das ausgewählte Objekt ausgeführt und es kann NOCH KEINE implizite Anforderung für ein zurückgegebenes Array geben und funktioniert nur, wenn Werte neu zugewiesen werden, soweit ich das beurteilen kann. Dies erfordert etwas mentale Gymnastik, reduziert jedoch die benötigten Codezeilen, wie oben zu sehen ist. Die Ausgabe ist genau die gleiche wie unten gezeigt:
Denken Sie daran, dass dies mit NON-NUMBERS funktioniert hat. Sie können jedes Objekt duplizieren, indem Sie einfach den Wert in der Funktion mapFN zurückgeben.
quelle
Die erste Funktion beantwortet die Frage. Es wird eine Karte erstellt.
Die zweite Funktion erstellt keine Karte. Stattdessen werden Eigenschaften im vorhandenen Objekt mit durchlaufen
hasOwnProperty()
. Diese Kartenalternative kann in einigen Situationen eine bessere Lösung sein.quelle
Wenn Sie
map
nicht nur Werte, sondern auch Schlüssel anpingen möchten, habe ich geschriebenObject.map(valueMapper, keyMapper)
, dass sich das so verhält:quelle
npm install @mattisg/object.map
.Ich brauchte eine Version, mit der auch die Schlüssel geändert werden konnten (basierend auf den Antworten von @Amberlamps und @yonatanmn).
factObject =
Bearbeiten: leichte Änderung, um das Startobjekt {} zu übergeben. Ermöglicht es, [] zu sein (wenn die Schlüssel Ganzzahlen sind)
quelle
Ich wollte speziell die gleiche Funktion verwenden, die ich für Arrays für ein einzelnes Objekt verwendet habe, und wollte es einfach halten. Das hat bei mir funktioniert:
quelle
var mapped = myMapFunction(item)
Um reagiert stärker auf , was genau die OP gefragt, will das OP ein Objekt:
eine Kartenmethode haben
myObject.map
,Die imho beste Antwort (gemessen an " nahe an dem, was gefragt wird " + "kein ES {5,6,7} unnötig erforderlich") wäre:
Der obige Code vermeidet die absichtliche Verwendung von Sprachfunktionen, die nur in neueren ECMAScript-Editionen verfügbar sind. Mit dem obigen Code kann das Problem folgendermaßen gelöst werden:
Abgesehen davon, dass einige die Stirn runzeln, wäre es eine Möglichkeit, die Lösung so in die Prototypenkette einzufügen.
Etwas, das, wenn es sorgfältig überwacht wird, keine negativen Auswirkungen haben und die
map
Methode anderer Objekte (z. B. Arraysmap
) nicht beeinflussen sollte.quelle
Konvertieren Sie zunächst Ihre HTMLCollection mit Object.entries (Sammlung). Dann ist es eine Iteration, die Sie jetzt mit der .map-Methode verwenden können.
Referenz https://medium.com/@js_tut/calling-javascript-code-on-multiple-div-elements-without-the-id-attribute-97ff6a50f31
quelle
Definieren Sie eine Funktion mapEntries.
mapEntries verwendet eine Rückruffunktion, die für jeden Eintrag im Objekt mit den Parametern value, key und object aufgerufen wird. Es sollte einen neuen Wert zurückgeben.
mapEntries sollte ein neues Objekt mit den neuen Werten zurückgeben, die vom Rückruf zurückgegeben wurden.
Bearbeiten: In einer früheren Version wurde nicht angegeben, dass dies keine aufzählbare Eigenschaft ist
quelle
Hey hat eine kleine Mapper-Funktion geschrieben, die helfen könnte.
quelle
Eine andere Sichtweise ist die Verwendung einer benutzerdefinierten JSON-Stringify-Funktion, die auch für tiefe Objekte geeignet ist. Dies kann nützlich sein, wenn Sie es trotzdem als json auf dem Server veröffentlichen möchten
quelle
Ich behandle nur Zeichenfolgen, um Ausnahmen zu reduzieren:
quelle
Object Mapper in TypeScript
Ich mag die Beispiele, die
Object.fromEntries
wie dieses verwendet werden , aber dennoch sind sie nicht sehr einfach zu verwenden. Die Antworten, die die verwendenObject.keys
und dann nachschlagen,key
führen tatsächlich mehrere Suchvorgänge durch, die möglicherweise nicht erforderlich sind.Ich wünschte, es gäbe eine
Object.map
Funktion, aber wir können unsere eigene erstellen und sieobjectMap
mit der Fähigkeit aufrufen , beide zu ändernkey
undvalue
:Verwendung (JavaScript):
Code (TypeScript):
Wenn Sie TypeScript nicht verwenden, kopieren Sie den obigen Code in TypeScript Playground , um den JavaScript-Code zu erhalten.
Auch der Grund Ich habe
keySelector
nachvalSelector
der Parameterliste, ist , weil es optional.* Ein Teil des Verdienstes geht an die Antwort von Alexander Mills .
quelle
Diese Funktion geht rekursiv durch das Objekt und die Arrays von Objekten. Attribute können gelöscht werden, wenn sie undefiniert zurückgegeben werden
quelle