我正在将 _.chain 函数组转换为使用 _fp.flow,但在处理 flow 柯里化(Currying)复杂对象的方式时遇到一些困难。我正在努力
- 将具有某些分组函数(例如
countBy
/sumBy
)的对象数组缩减为对象/字典(例如{ group1:10, group2:15 ... }
) - 将其映射到键/值对数组中(例如
[{column: 'group1', value: '10'}, ...]
) - 按
asc/desc
顺序对某个变量进行排序
但现在生成的对象最终被展平为一个长数组。代码示例如下。下面代码中的reducer
函数工作正常,并按照我的预期对值进行分组,但我认为each
步骤和orderBy
之间的柯里化(Currying)> 正在以某种方式展平对象(在 console.log
中的 _.each
之后正确形成所需的对象。
我已将代码示例放在随附的 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,如果这有什么区别的话。
最佳答案
您需要使用 map
而不是 each
,并将 [value, column]
的顺序固定为 [column,值]
const colData = _.flow(
_.reduce(reducer, {}),
_.toPairs,
_.map(([column, value]) => {
const outObj = {
value: value,
column: column
}
return outObj;
}),
_.orderBy(['value'], [sortDir])
)(inData);
关于javascript:使用 lodash/fp 流返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43002388/