Javascript 使用Ramda对数组项进行分组和转换
我需要按Javascript 使用Ramda对数组项进行分组和转换,javascript,ramda.js,Javascript,Ramda.js,我需要按batchNumber对数组中的项进行分组,并求和它们的值 目前我正在使用ramda,但我可以分组,但不能转换结果 你能给我举一个使用ramda.js的例子吗 : 您可以通过检查批次号是否等于来完成此操作。然后,将每个子阵列应用于所有对象,并应用“scrapAmount”字段的值: const{compose,groupWith,eqProps,map,apply,mergeWithKey,add}=R; 常量输入=[{“batchNumber”:“a”,“scrapAmount”:5
batchNumber
对数组中的项进行分组,并求和它们的值
目前我正在使用ramda,但我可以分组,但不能转换结果
你能给我举一个使用ramda.js的例子吗
:
您可以通过检查批次号是否等于来完成此操作。然后,将每个子阵列应用于所有对象,并应用“scrapAmount”字段的值:
const{compose,groupWith,eqProps,map,apply,mergeWithKey,add}=R;
常量输入=[{“batchNumber”:“a”,“scrapAmount”:5},{“batchNumber”:“a”,“scrapAmount”:10},{“batchNumber”:“b”,“scrapAmount”:1},{“batchNumber”:“b”,“scrapAmount”:2},{“scrapAmount”:7},{“scrapAmount”:3}]
常量byBatchNumber=compose(
映射(应用(mergeWithKey((k,l,r)=>k=='scrapAmount'?添加(l,r):r)),
groupWith(eqProps('batchNumber'))
)
console.log(按批次号(输入))
您可以通过检查批次号是否等于。然后,将每个子阵列应用于所有对象,并应用“scrapAmount”字段的值:
const{compose,groupWith,eqProps,map,apply,mergeWithKey,add}=R;
常量输入=[{“batchNumber”:“a”,“scrapAmount”:5},{“batchNumber”:“a”,“scrapAmount”:10},{“batchNumber”:“b”,“scrapAmount”:1},{“batchNumber”:“b”,“scrapAmount”:2},{“scrapAmount”:7},{“scrapAmount”:3}]
常量byBatchNumber=compose(
映射(应用(mergeWithKey((k,l,r)=>k=='scrapAmount'?添加(l,r):r)),
groupWith(eqProps('batchNumber'))
)
console.log(按批次号(输入))
相当简单的版本如下:
const{pipe,groupBy,prop,map,pull,sum}=R;
常量输入=[
{batchNumber:'a',scrapAmount:5},
{batchNumber:'a',scrapAmount:10},
{batchNumber:'b',scrapAmount:1},
{batchNumber:'b',scrapAmount:2},
{scrapAmount:7},
{报废数量:3}
]
常量总废料=管道(
groupBy(prop('batchNumber')),
地图(采摘量(‘报废量’),
地图(总和)
)
console.log(总废料(输入))
相当简单的版本如下:
const{pipe,groupBy,prop,map,pull,sum}=R;
常量输入=[
{batchNumber:'a',scrapAmount:5},
{batchNumber:'a',scrapAmount:10},
{batchNumber:'b',scrapAmount:1},
{batchNumber:'b',scrapAmount:2},
{scrapAmount:7},
{报废数量:3}
]
常量总废料=管道(
groupBy(prop('batchNumber')),
地图(采摘量(‘报废量’),
地图(总和)
)
console.log(总废料(输入))
使用此方法:var result=[];input.reduce(函数(res,value){if(!res[value.batchNumber]){res[value.batchNumber]={scrapAmount:0,batchNumber:value.batchNumber};result.push(res[value.batchNumber])}res[value.batchNumber].scrapAmount+=value.scrapAmount返回res;},{})代码>``R.map(reduce((acc,curr)=>acc+curr.scrapAmount,0))(byBatchNumber(input))```@NinaScholz:这看起来不像是一个副本,它要求更复杂的对象合并。这一个可能可以用管道(groupBy(prop('batchNumber'))、map(pulk('scrapAmount'))、map(sum))处理@ScottSauyet,请将此作为答案添加。使用此方法:var result=[];input.reduce(函数(res,value){if(!res[value.batchNumber]){res[value.batchNumber]={scrapAmount:0,batchNumber:value.batchNumber};result.push(res[value.batchNumber])}res[value.batchNumber].scrapAmount+=value.scrapAmount返回res;},{})代码>``R.map(reduce((acc,curr)=>acc+curr.scrapAmount,0))(byBatchNumber(input))```@NinaScholz:这看起来不像是一个副本,它要求更复杂的对象合并。这一个可能可以用管道(groupBy(prop('batchNumber'))、map(pulk('scrapAmount'))、map(sum))处理@ScottSauyet,请将此作为答案添加。
const input = [
{
batchNumber: 'a',
scrapAmount: 5
},
{
batchNumber: 'a',
scrapAmount: 10
},
{
batchNumber: 'b',
scrapAmount: 1
},
{
batchNumber: 'b',
scrapAmount: 2
},
{
scrapAmount: 7
},
{
scrapAmount: 3
}
]
const byBatchNumber = R.groupBy((batch) => batch.batchNumber);
console.log(byBatchNumber(input))
/* result wanted
const output = [
{
batchNumber: 'a',
scrapAmount: 15
},
{
batchNumber: 'b',
scrapAmount: 3
},
{
batchNumber: undefined,
scrapAmount: 10
},
]
*/