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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:40:28