Gegeben ein verschachteltes Objekt wie dieses:
%Vor% und ein Array wie dieses ["bentley", "suppliers", "0", "name"]
, gibt es eine existierende Funktion, die das tiefste Element, d. h. pluck_innards(cars, ['bentley', "suppliers", "0", "name"])
, auswählt und das "Sheffield Mines" zurückgibt.
Mit anderen Worten, gibt es eine Funktion (die ich deep_pluck
nennen werde) wo
Es scheint mir, dass dies einfach und doch häufig genug ist, um es wahrscheinlich in einer der JavaScript-Dienstprogrammbibliotheken wie jQuery getan zu haben oder lo-Dash / unterstreichen - aber ich habe es nicht gesehen.
Mein Gedanke ist etwas Triviales, nach dem Motto:
%Vor%Ich habe auf jsFiddle gepostet.
Es wäre natürlich hilfreich, wenn die Funktion intelligent genug wäre, um zu identifizieren, wann numerische Indizes in Arrays benötigt werden. Ich bin mir nicht sicher, welche anderen Vorbehalte ein Problem darstellen könnten.
Das ist alles eine ziemlich lange Frage für etwas, von dem ich mir vorstelle, dass es bereits clever gelöst wurde, aber ich dachte, es zu veröffentlichen, da ich daran interessiert wäre zu sehen, welche Lösungen da draußen sind.
dotty.get (obj, pathspec) tut es und akzeptiert entweder ein Array oder eine gepunktete Zeichenkette als pathspec.
Dotty ist Open Source und hat auch eine exists-Methode und einen Putter.
Die Methode ist eine Rekursion und Ihrer Idee sehr ähnlich, außer dass dotty einen Test für null / undefinierte Objekte enthält, so dass es keine Ausnahmen auslöst, um auf ein Element von etwas zuzugreifen, das nicht existiert.
>Die dotty.get () - Quelle aus den Dokumenten ist unten aufgeführt:
%Vor% Obwohl es sich nicht um eine generische Bibliothek handelt, scheint CasperJS etwas mit seiner utils.getPropertyPath
Funktion.
Ich bin auf Implementierungen gestoßen, um das ein paar Mal zu lösen, einschließlich:
Ich würde auch die relativ neue lodash.deep
zur Kenntnis nehmen.
Hier ist eine kurze ES6-Implementierung mit reduce
:
Verwendung:
%Vor%Tags und Links javascript underscore.js