我需要您的支持才能在Ramda进行分组。
我有数据,我需要:
数据:
[{
'id': '1', 'serviceType': { 'description': 'GE' },
'productCode': 'codeTwo', 'duration': { 'months': 24 },
}, {
'id': '2', 'serviceType': { 'description': 'GE' },
'productCode': 'codeOne', 'duration': { 'months': 12 }
}, {
'id': '3', 'serviceType': { 'description': 'RF' },
'productCode': 'codeOne', 'duration': { 'months': 24 },
}, {
'id': '4', 'serviceType': { 'description': 'RF' },
'productCode': 'codeOne', 'duration': { 'months': 12 },
}, {
'id': '5', 'serviceType': { 'description': 'RF' },
'productCode': 'codeOne', 'duration': { 'months': 36 },
}, {
'id': '6', 'serviceType': { 'description': 'GE' },
'productCode': 'codeOne', 'duration': { 'months': 24 }
}]
预期结果:
[{
'serviceType': 'GE',
'productCode': 'codeOne',
'duration': [12,24]
}, {
'serviceType': 'RF',
'productCode': 'codeOne',
'duration': [12,24,36]
}, {
'serviceType': 'GE',
'productCode': 'codeTwo',
'duration': [24]
}]
正在测试错误:
data.map(item => {
(item.serviceType === 'GE') ? listGE.push(item) : listRF.push(item)
R.compose(
R.values,
R.map(R.head),
R.map(R.prop('duration')),
R.groupBy(m => m.id !== id ? m.id : m.id)
)(listGE)
console.log(listGE);
})
listGE
我将为此任务使用reduceBy
:
collect
用于对持续时间进行分组key
用于标识一对唯一的服务类型和产品代码[值得注意的是,collect
做了一些重复,因为它一直一直在重新分配相同的服务类型和产品代码,但我认为可以忽略不计。
const collect = (acc, obj) => ({
serviceType: obj.serviceType.description,
productCode: obj.productCode,
duration: acc.duration.concat(obj.duration.months)
});
const key = obj => `${obj.serviceType.description}-${obj.productCode}`;
const transform = compose(values, reduceBy(collect, {duration:[]}, key));
console.log(
transform(data)
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.min.js"></script>
<script>const {compose, values, reduceBy} = R;</script>
<script>
const data = [
{ id: '1',
serviceType: { description: 'GE' },
productCode: 'codeTwo',
duration: { months: 24 }},
{ id: '2',
serviceType: { description: 'GE' },
productCode: 'codeOne',
duration: { months: 12 }},
{ id: '3',
serviceType: { description: 'RF' },
productCode: 'codeOne',
duration: { months: 24 }},
{ id: '4',
serviceType: { description: 'RF' },
productCode: 'codeOne',
duration: { months: 12 }},
{ id: '5',
serviceType: { description: 'RF' },
productCode: 'codeOne',
duration: { months: 36 }},
{ id: '6',
serviceType: { description: 'GE' },
productCode: 'codeOne',
duration: { months: 24 }}];
</script>