1 recursion clojure hashmap clojurescript
我试图做Clojure但坚持使用嵌套的hashmap.我有这样的结构:
{:type "view"
children: [
{:type "view"
:id "123"}
{:type "view"
:children [
{:type "view"}]}]}
Run Code Online (Sandbox Code Playgroud)
现在我想:id用随机字符串向每个hashmap 添加字段(如果不存在).得到这样的东西:
{:type "view"
:id "43434"
children: [
{:type "view"
:id "123"}
{:type "view"
:id "456"
:children [
{:type "view"
:id "5656"}]}]}
Run Code Online (Sandbox Code Playgroud)
你可以clojure.walk/postwalk这样做:
(walk/postwalk
(fn [v]
(if (and (map? v) (nil? (:id v)))
(assoc v :id (str (rand-int 9999)))
v))
data)
=>
{:type "view"
:id "3086"
:children [{:type "view"
:id "123"}
{:type "view"
:id "8243"
:children [{:type "view" :id "3222"}]}]}
Run Code Online (Sandbox Code Playgroud)
... data输入地图在哪里?postwalk遍历您的嵌套映射,并在没有一个映射的每个映射上assoc处理一个:id键(一个随机整数字符串).