我想使用 ramba 进行以下转换
输入集合
const vals = [
{metric: "Sales", measure:100, period_end_date: "2021-12-31", period_type: 'Annual' },
{metric: "EBT", measure:101, period_end_date: "2021-12-31", period_type: 'Annual' },
{metric: "Sales", measure:100, period_end_date: "2021-09-30", period_type: 'Qtr' },
{metric: "EBT", measure:101, period_end_date: "2021-09-30", period_type: 'Qtr' }
]
输出
{
"2021-09-30|Qtr": [{"Sales": 100}, {"EBT": 101],
"2021-12-31|Annual": [{"Sales": 100, }, {"EBT": 101,}]
}
我已经非常接近这个
const keyGen = compose(objOf('key'), join('|'), props(['period_end_date','period_type']))// + '|' + prop("period_type",o) }
const valGen = compose(apply(objOf), R.ap([R.prop('metric'), R.prop('measure')]), of )
const f4 = map(compose(apply(merge), R.ap([keyGen, valGen]), of))
const result =compose(groupBy(prop('key')),f4 ) (vals)
这给了我以下结果
{"2021-09-30|Qtr": [{"Sales": 100, "key": "2021-09-30|Qtr"},
{"EBT": 101, "key": "2021-09-30|Qtr"}],
"2021-12-31|Annual": [{"Sales": 100, "key": "2021-12-31|Annual"},
{"EBT": 101, "key": "2021-12-31|Annual"}]}
现在我需要从内部集合中删除key
。我想知道是否有更好的选择。
最佳答案
也许您应该简化您的代码,只使用一个简单的函数来将您的集合减少到所需的输出?我使用了 Array.prototype.reduce,它很容易转换为 Ramda 的函数式、无点、柯里化(Currying)风格:
const convert = (acc, item) => {
const name = `${item.period_end_date}|${item.period_type}`
if (!acc[name]) acc[name] = []
acc[name].push({ [item.metric]: item.measure })
return acc
}
const transform = R.reduce(convert, {})
transform(vals)
没有 Ramda 的工作片段:
const vals = [{
metric: "Sales",
measure: 100,
period_end_date: "2021-12-31",
period_type: 'Annual'
},
{
metric: "EBT",
measure: 101,
period_end_date: "2021-12-31",
period_type: 'Annual'
},
{
metric: "Sales",
measure: 100,
period_end_date: "2021-09-30",
period_type: 'Qtr'
},
{
metric: "EBT",
measure: 101,
period_end_date: "2021-09-30",
period_type: 'Qtr'
}
]
const result = vals.reduce((acc, item) => {
const name = `${item.period_end_date}|${item.period_type}`
if (!acc[name]) acc[name] = []
acc[name].push({
[item.metric]: item.measure
})
return acc
}, {})
console.log(result)
关于javascript - 使用 ramda 转换集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47104620/