我正在将一个_.chain函数组转换为使用_fp.flow,但是在处理流程复杂对象的方式时遇到了一些困难。我想
countBy
/ sumBy
)缩减为对象/词典(例如{ group1:10, group2:15... }
)[{column: 'group1', value: '10'}, ...]
)asc/desc
订单但是现在最终的对象最终变成了一个长数组。代码示例如下。下面代码中的reducer
函数正常工作并按照我的意图对值进行分组,但我认为each
步和orderBy
之间的讨论会以某种方式使对象变平(所需的) _.each
中的console.log
后,对象形成正确。
我在附加的JSFiddle中放了一些代码示例。
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语法和React,如果这有所不同。
答案 0 :(得分:1)
您需要使用map
代替each
,并将[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);
答案 1 :(得分:1)
根据我的理解,这是你想要完成的事情
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 } ]