在Clojure [Script]中,地图的等效是什么?

时间:2018-02-04 22:52:31

标签: javascript clojure clojurescript

我可以在JavaScript中执行以下地图销毁:

const drop = (key, obj) => {
  const { [key]: _, ...rest } = obj;
  return rest;
}

drop('name', { name: 'book', chapters: 12 }); // => { chapters: 12 }

如何在Clojure [脚本]中为地图做...rest / & rest

1 个答案:

答案 0 :(得分:3)

在Clojure中没有像地图那样的等效解构。如果您只想按键省略地图条目,我认为有效地您正在寻找dissoc

(dissoc {:name "book" :chapters 12}
        :name)
=> {:chapters 12}

其他序列类型的休息解构:

(let [[x & xs] [1 2 3]]
  (prn x)   ;; "1"
  (prn xs)) ;; "(2 3)"

其中xs&之后的部分)是值的其余部分。

地图解构还有其他几种选择:

(def my-map {:name "book" :chapters 12 :extra "stuff"})
(let [{:keys [name chapters] :as m} my-map]
  (prn name)     ;; value of name key only
  (prn chapters) ;; value of chapters key only
  (prn m))       ;; the entire bound value
;; "book"
;; 12
;; {:name "book", :chapters 12, :extra "stuff"}

在该解构示例中使用:as可能是您在JavaScript中看到的最接近的行为,除非它排除显式解构的密钥

(let [{n :name} my-map]
  (prn n)) ;; the value of name key only, aliased

有关详情,请参阅this guide