我有一个试剂原子,它由一个键/值映射矢量组成。
如何删除具有UUID的某个键值的键/值对?我试过了:
(swap!state / items(dissoc @ state / items id))
但我明白了:
core.cljs:270未捕获错误:没有为类型cljs.core / LazySeq定义的协议方法IMap.-dissoc:({:id #uuid" e1f9341f-bc02-4c17-a594-b9b5ede72214", :description" foo bar"})
答案 0 :(得分:2)
我认为您需要使用remove
。所以这应该有所帮助:
(def data [{:id "e1f9341f-bc02-4c17-a594-b9b5ede72214" :description "Foo"} {:id "e1f9341f-bc02-4c17-a594-b9b5ede72214" :description "Bar"}] )
(remove #(= (:id %) "e1f9341f-bc02-4c17-a594-b9b5ede72214") data)
;; => ()
swap!
函数获取旧值并返回更新的值。因此,上面的data
将是旧值。您传递给swap!
的功能将如下所示:
(fn [old]
(remove #(= (:id %) "e1f9341f-bc02-4c17-a594-b9b5ede72214") old))