Ramda - 如何将对象值映射到字符串

Ramda - How to map object values to string

我正在尝试使用 Ramda 获取 x,y 坐标以在 svg 中绘制 polyline

我有 edge 对象,其中包含我需要的所有点,它看起来像这样:

const edge = {
    "id": "e1_s0",
    "startPoint": {
        "x": 212,
        "y": 505.33333333333326
    },
    "endPoint": {
        "x": 232,
        "y": 302
    },
    "bendPoints": [
        {
            "x": 222,
            "y": 505.33333333333326
        },
        {
            "x": 222,
            "y": 302
        }
    ],
    "incomingShape": "n1",
    "outgoingShape": "n2"
}

我尝试使用 Ramda 从 startPointendPointbendPoints 中获取 x, y。我想出了这段代码:

R.pipe(
  R.pick(['bendPoints', 'endPoint', 'startPoint']),
  R.values,
  R.flatten,
  R.sortBy(R.prop('x'))
)(edge)

这里可以查看ramda editor

结果,我得到:

[
    {
        x: 212,
        y: 505.33333333333326
    },
    {
        x: 222,
        y: 505.33333333333326
    },
    {
        x: 222,
        y: 302
    },
    {
        x: 232,
        y: 302
    }
]

但我需要一个包含 xy 对的字符串除以 space 并且我不知道如何继续达到这一点:212,505.33333333333326 222,505.33333333333326 222,302 232,302

如有任何帮助,我们将不胜感激

编辑:完整的解决方案

R.pipe(
  R.pick(['bendPoints', 'endPoint', 'startPoint']),
  R.values,
  R.flatten,
  R.sortBy(R.prop('x')),
  R.map(
    R.pipe(
      R.props(['x', 'y']),
      R.join(',')
    )
  ),
  R.join(" ")
)(edge)

我认为你需要的步骤是:

  • 对于每个点,
    • xy 值,
    • 将它们连接成一个字符串,用 ","
    • 分隔
  • 获取这些字符串并将它们连接成一个字符串,由 " "
  • 分隔

可以直译为 ramda:

const formatPoints = pipe(
  map(
    pipe(
      props(["x", "y"]),
      join(",")
    )
  ),
  join(" ")
);