Как удалить ключ/значение из вектора атома реагента?

У меня есть атом реагента, который состоит из вектора карт ключ/значение.

Как я могу удалить пару ключ/значение с определенным значением ключа, которое оказывается UUID? Я пытался:

(своп! состояние/предметы (dissoc @state/items id))

но я получаю:

core.cljs:270 Uncaught Error: Метод протокола IMap.-dissoc не определен для типа cljs.core/LazySeq: ({:id #uuid "e1f9341f-bc02-4c17-a594-b9b5ede72214", :description "foo bar"})


person Artur    schedule 09.09.2016    source источник


Ответы (1)


Я думаю, вам нужно использовать 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))
person Chris Murphy    schedule 09.09.2016
comment
Мои данные такие: [{:id e1f9341f-bc02-4c17-a594-b9b5ede72214 :description Foo} {:id e1f9341f-bc02-4c17-a594-b9b5ede72214 :description Bar}] Итак, мне нужно удалить карту с определенный :id. - person Artur; 09.09.2016