javascript:使用lodash/fp流返回对象
我正在将一组u.chain函数转换为使用u fp.flow,但在处理flow处理复杂对象的方式时遇到了一些困难。我正在努力javascript:使用lodash/fp流返回对象,javascript,functional-programming,lodash,Javascript,Functional Programming,Lodash,我正在将一组u.chain函数转换为使用u fp.flow,但在处理flow处理复杂对象的方式时遇到了一些困难。我正在努力 使用某些分组函数(例如countBy/sumBy)将对象数组缩减为对象/字典(例如{group1:10,group2:15…}) 将其映射到键/值对数组中(例如,[{column:'group1',value:'10'},…]) 按某个变量排序为asc/desc顺序 但现在,结果对象最终被展平成一个长数组。下面是代码示例。下面代码中的reducer功能工作正常,并按照我的预
countBy
/sumBy
)将对象数组缩减为对象/字典(例如{group1:10,group2:15…}
)[{column:'group1',value:'10'},…]
)asc/desc
顺序reducer
功能工作正常,并按照我的预期对值进行分组,但是我认为每个步骤和orderBy
之间的转换会以某种方式使对象变平(所需对象在之后正确形成。每个在控制台中。log
)
我已经在附带的JSFIDLE中放了一个代码示例
const inData = [{
target: 123,
groupby: 'a'
},...
}];
const colData = _.flow(
_.reduce(reducer, {}),
_.toPairs,
_.each(([value, column]) => {
console.log(value);
console.log(column);
const outObj = {
value: value,
column: column
}
console.log(outObj)
return (outObj);
}),
_.orderBy(['value'], [sortDir]),
// Have tried result with or without fromPairs
_.fromPairs
)(inData);
PS:我正在使用ES6语法并在我的主要项目中做出反应,如果这有什么不同的话
您需要使用映射
而不是每个
,还需要将[value,column]
的顺序固定到[column,value]
const colData = _.flow(
_.reduce(reducer, {}),
_.toPairs,
_.map(([column, value]) => {
const outObj = {
value: value,
column: column
}
return outObj;
}),
_.orderBy(['value'], [sortDir])
)(inData);
您需要使用映射
而不是每个
,还需要将[value,column]
的顺序固定到[column,value]
const colData = _.flow(
_.reduce(reducer, {}),
_.toPairs,
_.map(([column, value]) => {
const outObj = {
value: value,
column: column
}
return outObj;
}),
_.orderBy(['value'], [sortDir])
)(inData);
据我所知,这就是你想要实现的目标
const inData =
[ { target: 123, groupby: 'a' },
{ target: -123, groupby: 'b' },
{ target: 123, groupby: 'a' },
{ target: -123, groupby: 'b' } ]
const colData = _.flow(
_.reduce((map, {target:v, groupby:k}) =>
Object.assign(map, { [k]: map[k] === undefined ? v : map[k] + v }), {}),
_.toPairs,
_.map(([column, value]) => ({ column, value }))
)
console.log(colData(inData));
// => [ { column: 'a', value: 246 },
// { column: 'b', value: -246 } ]
据我所知,这就是你想要实现的目标
const inData =
[ { target: 123, groupby: 'a' },
{ target: -123, groupby: 'b' },
{ target: 123, groupby: 'a' },
{ target: -123, groupby: 'b' } ]
const colData = _.flow(
_.reduce((map, {target:v, groupby:k}) =>
Object.assign(map, { [k]: map[k] === undefined ? v : map[k] + v }), {}),
_.toPairs,
_.map(([column, value]) => ({ column, value }))
)
console.log(colData(inData));
// => [ { column: 'a', value: 246 },
// { column: 'b', value: -246 } ]
您应该包括示例数据和预期输出您应该包括示例数据和预期输出