(doc js->clj)
-------------------------
cljs.core/js->clj
([x] [x & opts])
Recursively transforms JavaScript arrays into ClojureScript
vectors, and JavaScript objects into ClojureScript maps. With
option ':keywordize-keys true' will convert object fields from
strings to keywords.
Wie Sie js-clj
verwandelt JS-Objekte rekursiv in ClojureScript Datenstrukturen sehen.
Also, wenn Sie ein JS-Objekt:
{1: {2: "a"}, 3: [true, 4]}
js->clj
wird es in folgendem ClojureScript Objekt konvertieren:
{"1" {"2" "a"}, "3" [true 4]}
Soweit ich weiß, wenn Sie über JS Objekteigenschaften mit for
iterieren es wird nur über Eigenschaften des Objekts, das Sie übergeben, iterieren, es geht nicht in die Eigenschaften dieser Eigenschaften:
for (a in {1: {2: "a"}, 3: {4: "b"}) { console.log(a); };
Es wird nur 1
und 3
gedruckt und nicht in 2
oder 4
.
würde So sei eine ClojureScript Version dieser for
Schleife:
(doseq [[k v] (js->clj js/g)]
(.log js/console k))
So bin ich nicht klar, warum Sie haben erklärt, dass js->clj
flach ist, wenn es nicht ist.
Wenn Sie die gesamte Datenstruktur rekursiv durchlaufen möchten, können Sie clojure.walk/prewalk
oder clojure.walk/postwolk
verwenden, die alle Ihre Werte in einer Datenstruktur (sie können in Karten, Vektoren, Sets usw. einsteigen) aufrufen und Ihren Anruf tätigen Funktion für jeden gefundenen Wert:
(clojure.walk/postwalk
#(do (.log js/console "PostWalking" %)
%)
{:a 1 :b {:c 2}})
(clojure.walk/prewalk
#(do (.log js/console "PreWalking" %)
%)
{:a 1 :b {:c 2}})