Ramda - 从多个对象中获取一个数组

Ramda - Get one array from multiple objects

我正在尝试使用 ramda 从多个对象中提取节点数组。

示例数据:

const testData = {
  "117590": {
    "id": 117590,
    "nodes": [
      117864,
      117865,
      117866
    ]
  },
  "117591": {
    "id": 117591,
    "nodes": [
      117867,
      117868
    ]
  }
}

我尝试使用这样的查询:R.pluck('nodes', testData); 但结果我得到了:

{"117590": [117864, 117865, 117866], "117591": [117867, 117868]}

如何将所有节点合并到一个数组中? 这是我的 Ramda editor link

选项 1:使用 R.values 转换为数组,然后提取并展平结果。

选项 2:使用 R.values,然后得到 nodes 并使用 R.chain 和 R.prop 展开。

const { pipe, values, pluck, flatten, chain, prop } = R

const fn1 = pipe(values, pluck('nodes'), flatten)
const fn2 = pipe(values, chain(prop('nodes')))

const testData = {"117590":{"id":117590,"nodes":[117864,117865,117866]},"117591":{"id":117591,"nodes":[117867,117868]}}

console.log(fn1(testData))

console.log(fn2(testData))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.min.js" integrity="sha512-rZHvUXcc1zWKsxm7rJ8lVQuIr1oOmm7cShlvpV0gWf0RvbcJN6x96al/Rp2L2BI4a4ZkT2/YfVe/8YvB2UHzQw==" crossorigin="anonymous"></script>

分两步想想就可以了。首先获取对象的值,然后获取它们的 node 属性。获取这些节点的最简单方法是使用 chain (prop ('node'))。这两个步骤可以结合 pipecompose.

const getNodes = pipe (values, chain(prop('nodes')))

const testData = {117590: {id: 117590, nodes: [117864, 117865, 117866]}, 117591: {id: 117591, nodes: [117867, 117868]}}

console .log (getNodes (testData))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.min.js"></script>
<script> const {pipe, values, chain, prop} = R                                 </script>