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)
Ah, so naming the paths of things you want to get rid of.
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)
Interesting. I may try both approaches and see what is most clear.
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)
I think that viewed
with a bit of polish could go into specter core 🙂