排序和过滤后,Concat对值进行了分组

时间:2018-04-20 13:01:49

标签: ramda.js

我使用groupBy语句在Ramda中创建了一个两级深度对象,然后我将其用于sortfilter。我现在想要将这些数组连接成一个并将其作为pipe的结果返回。

我有一种方法,但对于我想做的事情,感觉真的超过了顶层。

数据示例:

{
    "test1": {
        "123": [
            {
                param1: "test1",
                param2: 123,
            }
        ]
    },
    "test2": {
        "456": [
            {
                param1: "test2",
                param2: 456,
            }
        ]
    },
    "test3": {
        "789": [
            {
                param1: "test3",
                param2: 789,
            },
            {
                param1: "test4",
                param2: 246,
            }
        ]
    }
}

我希望管道的最终结果是:

[
  {
    param1: "test1",
    param2: 123,
  },
  {
    param1: "test2",
    param2: 456,
  },
  {
    param1: "test3",
    param2: 789,
  },
  {
    param1: "test4",
    param2: 246,
  }
]

我尝试将其恢复为一系列对象:

pipe(
  ...
  toPairs,
  map(tail),
  flatten,
  map(toPairs),
  map(map(tail)),
  flatten,
)(data)

感觉像这样的事情不应该这么困难。关于我如何做到这一点的任何其他建议?

============= EDIT =============

我也试过这个:

pipe(
  ...
  map(values),
  values,
  flatten
)(data)

哪个更短,但仍然不确定它是否尽可能优雅。

1 个答案:

答案 0 :(得分:1)

我没有看到比你更新的建议更优雅的东西。 (有趣的是,在没有看你的情况下,我想出了同样的事情,除了我切换valuesmap(values) - 无论哪种方式都有效。)

但是,我很好奇,你需要做groupBy然后展平结果的根本问题。它有什么作用?我经常使用groupBy后跟values,但我认为我从未见过像你这样的要求。有什么问题,如果你不介意我的问题?