首页 > 解决方案 > Ramda:如何使用带有两个参数的 R.map?

问题描述

它适用于一对数组。在这个例子中我不需要使用 Ramda。

const addChild1 =  (x , y) => `${x}.addChild(${y}); ` 
const result1 = addChild(["containerA"], ["a1","a2", "a3"])

console.log(result1) //containerA.addChild(a1,a2,a3) 

我无法使其与二维字符串矩阵一起使用。我使用R.map了 ,但在第二个参数中我得到了“未定义”。

const addChild2 =  R.map ((x , y) => `${x}.addChild(${y}); `) 
const result2 = addChild2(["containerA", "containerB", "containerC"], [["a1","a2", "a3"], ["b1","b2", "b3"], ["c1","c2", "c3"]])

console.log(result2) //["containerA.addChild(undefined); ","containerB.addChild(undefined); ","containerC.addChild(undefined); "]

如何避免“未定义”?理想的输出如下:

["containerA.addChild("a1","a2", "a3"); ","containerB.addChild("b1","b2", "b3"); ","containerC.addChild("c1", "c2", "c3");"]

标签: ramda.js

解决方案


map将字符串作为第二个参数,所以在这种情况下,只["containerA", "containerB", "containerC"]进入循环

您应该zipWith在这种情况下使用而不是 map

const addChild2 = R.zipWith((x, y) => `${x}.addChild(${y}); `)
const result2 = addChild2(
  ["containerA", "containerB", "containerC"],
  [
    ["a1", "a2", "a3"],
    ["b1", "b2", "b3"],
    ["c1", "c2", "c3"],
  ]
)

console.log(result2)
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>


推荐阅读