This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2018-03-02
Channels
- # aleph (6)
- # beginners (57)
- # boot (1)
- # cider (27)
- # clara (23)
- # cljs-dev (166)
- # clojure (287)
- # clojure-dev (23)
- # clojure-greece (1)
- # clojure-italy (2)
- # clojure-russia (13)
- # clojure-spec (34)
- # clojure-uk (36)
- # clojurescript (68)
- # core-async (63)
- # core-logic (1)
- # cursive (1)
- # data-science (1)
- # datomic (26)
- # duct (1)
- # emacs (10)
- # figwheel (8)
- # fulcro (2)
- # garden (16)
- # graphql (8)
- # hoplon (20)
- # jobs (2)
- # leiningen (10)
- # off-topic (16)
- # onyx (2)
- # portkey (5)
- # quil (1)
- # re-frame (63)
- # reagent (95)
- # reitit (6)
- # remote-jobs (1)
- # ring (6)
- # rum (1)
- # shadow-cljs (76)
- # spacemacs (26)
- # specter (11)
- # sql (7)
- # unrepl (68)
- # vim (2)
- # yada (2)
If I want to select some substructure out of a nested map, rather than just the leaves, what's the best way to do that with specter?
IE, I have {:foo 1 :bar {:baz 2 :bat 3}}
, and I want to select out {:bar {:baz 2}}
.
New to the library and just poking around. Thought subselect
or filterer
might work, but at least the way I'm using them they aren't quite right.
@andrew354 it depends on the use case, but generally the most straightforward approach is to remove what you don't want
(setval (multi-path :foo [:bar :bat]) NONE data)
Unfortunately I think in my actual use-case, I want to keep a fairly small part of the structure, but I'll see if this approach will work.
@andrew354 another approach that explicitly selects the keys you want:
(defdynamicnav viewed [path viewnav]
(transformed path #(select-any viewnav %)))
(select-any [(submap [:bar]) (viewed :bar (submap [:baz]))] data)
could make a helper that takes in a list of keyword paths and produces the navigation
e.g. (select-any (keep-keyword-paths [:bar :baz]) data)