Clojure[Script] 中地图的 ...rest 等价物是什么?
What is the equivalent of ...rest for maps in Clojure[Script]?
我可以在 JavaScript 中像下面这样进行地图销毁:
const drop = (key, obj) => {
const { [key]: _, ...rest } = obj;
return rest;
}
drop('name', { name: 'book', chapters: 12 }); // => { chapters: 12 }
如何在 Clojure[Script] 中对地图执行 ...rest
/& rest
?
对于 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。
我可以在 JavaScript 中像下面这样进行地图销毁:
const drop = (key, obj) => {
const { [key]: _, ...rest } = obj;
return rest;
}
drop('name', { name: 'book', chapters: 12 }); // => { chapters: 12 }
如何在 Clojure[Script] 中对地图执行 ...rest
/& rest
?
对于 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。