如何在Clojure的map函数中返回多元素以生成正确表格行结构?
问题:基于Clojure数据生成表格行元素
这是我此前在本站提问并获得优质解答后的跟进问题,基于之前的问题稍作修改。
我需要根据如下数据结构,生成包含对应name和value的:td元素的表格行:
(table-rows [{:name "foo" :value 1} {:name "hey" :value 2}])
初始代码与问题
初始代码如下:
(defn table-rows [data] (->> data (map (fn [{:keys [name] :as row}] [:td (:name row)])) (into [:tr])))
当前代码返回结果为:
=> [:tr [:td "foo"] [:td "hey"]]
我知道map中的匿名函数只会返回最后一个元素,但如果把两个[:td]包裹为一个整体返回,表格就无法正常工作。项目里会用到更多[:td]元素,这里仅以两个为例简化问题。我试过用let但总是出问题,所以来求助。
更新1:找到解决方案
评论区的提示让我找到了需要的代码:
(defn table-rows [data] (->> data (map (fn [{:keys [name] :as row}] [:tr [:td (:name row)] [:td (:value row)]])) (into [:tbody])))
这段代码生成了预期的结果:
[:tbody [:tr [:td "foo"] [:td 1]] [:tr [:td "hey"] [:td 2]]]
感谢大家的帮助!
更新2:简化代码
后来我发现可以移除匿名函数参数里的解构,进一步简化代码:
(defn table-rows [data] (->> data (map (fn [row] [:tr [:td (:name row)] [:td (:value row)]])) (into [:tbody])))
内容的提问来源于stack exchange,提问作者THX1137
相关产品推荐
相关产品推荐

