首页 > 解决方案 > 在 clojure 中同时使用 assoc 和 dissoc 转换地图

问题描述

我有一张如下图所示的地图。我正在从一个原子数据库中获取信息。现在我想在这里转换数据结构:

(def my-map [{:db/id #object[Object 56536887900242005],
                 :height 630,
                 :distance 1474.1,
                 :coordinates [-26.65622109697031 30.48401767312403],
                 :location #:location{:id 1}}
                {:db/id #object[Object 56536887900242006],
                 :height 22075,
                 :distance 1503.2,
                 :coordinates [-26.65622109697031 30.48401767312403],
                 :location #:location{:id 2}}
                {:db/id #object[Object 56536887900242007],
                 :height 24248,
                 :distance 1695.6,
                 :coordinates [-26.662030943549 30.25648873549992],
                 :location #:location{:id 3}})

看起来像这样

{1 {:height 630, :distance 1474.1,:coordinates [-26.65622109697031 30.48401767312403]}
 2 {:height 22075, :distance 1503.2,:coordinates [-26.65622109697031 30.48401767312403]}
 3 {:height 24248, :distance 1695.6,:coordinates [-26.65622109697031 30.48401767312403]}}

我想从中拉出 1,#:location{:id 1}然后我将assoc

{:height 22075, :distance 1503.2,:coordinates [-26.65622109697031 30.48401767312403]}

贝娄我有返回上述内容的代码,但我不知道如何将assoc其输入,:id而且我也不知道如何获取 id,因为数据有#

(map #(dissoc % :db/id :location ) my-map)

标签: clojureclojurescript

解决方案


无论如何,我plumbing.core在每个项目中都使用,如果你也这样做,那么这个解决方案可能会吸引你。

(grouped-map
    (fn-> :location :location/id)
    (fn-> (dissoc :location :db/id))
    my-map)

推荐阅读