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

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功能工作正常,并按照我的预

我正在将一组u.chain函数转换为使用u fp.flow,但在处理flow处理复杂对象的方式时遇到了一些困难。我正在努力

  • 使用某些分组函数(例如
    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 } ]
    

    您应该包括示例数据和预期输出您应该包括示例数据和预期输出