我正在寻找最好的方法来有条件地避免在初始化/定义时将元素添加到地图中。在这种情况下,如果键的值为 nil,我想避免将元素添加到映射中。
(defn create-record [data]
(let [res {
:username (data :username)
:first-name (get-in data [:user-info :name :first])
:last-name (get-in data [:user-info :name :last])
:gender (get-in data [:user-info :sex])
}])
)
如果获取结果为零(数据中的性别字段不存在),我不想将性别添加到地图中。当我创建地图时有办法做到这一点吗?我可以在创建映射后删除所有值为 nil 的键,但在某些情况下,我希望某些键具有 nil 值,而其他键则根本不在映射中(如果它们具有 nil 值)。
我会结合使用merge
and when-let
对于这些可选参数。
核心思想是合并单个元素映射或每个可选参数的 nil 。合并到 nil 不会执行任何操作,因此您不会在地图中看到 nil。
(defn create-record [data]
(let [res (merge {:username (data :username)
:first-name (get-in data [:user-info :name :first])
:last-name (get-in data [:user-info :name :last])}
(when-let [gender (get-in data [:user-info :sex])]
{:gender gender}))]
res))
根据您需要执行此操作的频率,我建议在 when-let 周围编写一个简短的宏或函数,以使代码更加简洁。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)