Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Ramda对数组项进行分组和转换_Javascript_Ramda.js - Fatal编程技术网

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
    },
]

*/