javascript:使用 lodash/fp 流返回对象

标签 javascript functional-programming lodash

我正在将 _.chain 函数组转换为使用 _fp.flow,但在处理 flow 柯里化(Currying)复杂对象的方式时遇到一些困难。我正在努力

  1. 将具有某些分组函数(例如 countBy/sumBy)的对象数组缩减为对象/字典(例如 { group1:10, group2:15 ... } )
  2. 将其映射到键/值对数组中(例如 [{column: 'group1', value: '10'}, ...])
  3. 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,如果这有什么区别的话。

https://jsfiddle.net/moc0L5ac/

最佳答案

您需要使用 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/

相关文章:

Javascript:基本 for 循环不起作用

javascript - 如何使用 Javascript 替换特定的 href 链接?

javascript - 在 IE 中单击表单按钮后重新加载页面

algorithm - 运算符下计算闭包的高效函数算法

functional-programming - 简单类型的 lambda 演算与 Hindley-Milner 类型系统

javascript - 如何使用Math.max等作为高阶函数

javascript - 使用 google-drive-api 将文件插入特定文件夹

javascript - Lodash - 显示对象的更改属性

angular - Angular2 中的 Lodash,声明 var_ :any not working

javascript - 带下划线或条件的下划线(下划线、lodash 或任何其他解决方案)