You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Clojure中过滤含指定键的:sellers集合并更新原Map

解决方法

首先调整你的校验函数,让它直接返回布尔值表示卖家是否合法:

(:require [validateur.validation :as v])

(def my-map {:buyers [{:name "James" :city "Berlin"} {:name "Jane" :city "Milan"}]
             :sellers [{:name "Dustin" :city "Turin" :age "21"} {:name "Dustin" :city "Milan" :age "" } {:city "Rome" :age "22"}]})

(defn valid-seller? [mp]
  (let [v-set (v/validation-set
               (v/presence-of #{:name :city :age}))]
    ;; 校验结果为空Map表示没有错误,即该卖家合法
    (empty? (v-set mp))))

接下来用update函数修改原Map的:sellers字段,过滤掉不合法的子Map:

(def filtered-map (update my-map :sellers #(filter valid-seller? %)))

运行后filtered-map的结果就是你需要的结构:

{:buyers [{:name "James" :city "Berlin"} {:name "Jane" :city "Milan"}]
 :sellers [{:name "Dustin" :city "Turin" :age "21"}]}

原理说明

  • valid-seller?通过validateur的校验集,检查卖家Map是否同时存在:name、:city、:age三个键且对应值非空,校验返回的错误Map为空时说明合法。
  • update函数专门用于修改Map中的指定键,这里我们对:sellers对应的列表执行filter操作,只保留合法的卖家子Map。

内容的提问来源于stack exchange,提问作者Razz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 18:54:22