如何在下面的代码中从map函数返回两个元素?



这是我在这里问的另一个问题的后续,我得到了一个很棒的答案。这个问题的前提稍微修改了一下,以允许这个问题。

如何为'name'和'value'生成具有:td's的表行,如此数据结构所示:

(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"]]

映射(fn...)将只返回最后一个元素,对吗?如果我把两个[:td]包在某个东西里,这样它就会作为一个单位返回,这个表就不能工作了。

在我的项目中,我将有更多的[:td...]元素多于两个;我选择了两个来简化我的问题。

我怀疑let是我应该考虑的,但每次我开始沿着这条路走下去,我都会遇到麻烦,所以我想我应该问一下。

更新:

评论中的一个问题让我意识到这就是我想要的:

(->> 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:

,我意识到我可以从'fn'的参数中删除解构,这样我就有:

(defn table-rows [data]
(->> data
(map (fn [row]
[:tr
[:td (:name row)]
[:td (:value row)]]))
(into [:tbody])))

多亏了下面评论中的一些很棒的帮助,我才能弄清楚我需要什么,这是:

(defn table-rows [data]
(->> data
(map (fn [row]
[:tr
[:td (:name row)]
[:td (:value row)]]))
(into [:tbody])))

生产

[:tbody [:tr [:td "foo"] [:td 1]] 
[:tr [:td "hey"] [:td 2]]]

谢谢你的帮助!

(对自己的注意:确保在发布这里之前找出我想从函数中得到的东西)

PS -看起来我必须等几天才能接受我自己的答案,有人建议我这样做,这样就不会显得没有答案。

相关内容

  • 没有找到相关文章

最新更新