【问题标题】:How can I use lodash groupby or other functions to group following data?如何使用 lodash groupby 或其他函数对以下数据进行分组?
【发布时间】:2016-07-06 08:47:37
【问题描述】:

我有以下数据

x = [
  [
    {
      key: `col-${1}`,
      value: 'VEH1'
    },
    {
      key: `col-${2}`,
      value: '300x250 Medium Rectangle'
    },
    {
      key: `col-${3}`,
      value: '1 Mar 2016'
    },
    {
      key: `col-${4}`,
      value: '$7'
    },
    {
      key: `col-${5}`,
      value: '$10'
    },
    {
      key: `col-${6}`,
      value: '$12,500'
    }
  ],
  [
    {
      key: `col-${1}`,
      value: 'VEH1'
    },
    {
      key: `col-${2}`,
      value: '300x250 Medium Rectangle'
    },
    {
      key: `col-${3}`,
      value: '1 Mar 2016'
    },
    {
      key: `col-${4}`,
      value: '$7'
    },
    {
      key: `col-${5}`,
      value: '$10'
    },
    {
      key: `col-${6}`,
      value: '$12,500'
    }
  ],
  [
    {
      key: `col-${1}`,
      value: 'VEH1'
    },
    {
      key: `col-${2}`,
      value: '300x250 Medium Rectangle'
    },
    {
      key: `col-${3}`,
      value: '1 Mar 2016'
    },
    {
      key: `col-${4}`,
      value: '$7'
    },
    {
      key: `col-${5}`,
      value: '$10'
    },
    {
      key: `col-${6}`,
      value: '$12,500'
    }
  ],
  [
    {
      key: `col-${1}`,
      value: 'VEH2'
    },
    {
      key: `col-${2}`,
      value: '300x250 Medium Rectangle'
    },
    {
      key: `col-${3}`,
      value: '1 Mar 2016'
    },
    {
      key: `col-${4}`,
      value: '$7'
    },
    {
      key: `col-${5}`,
      value: '$10'
    },
    {
      key: `col-${6}`,
      value: '$12,500'
    }
  ],
  [
    {
      key: `col-${1}`,
      value: 'VEH2'
    },
    {
      key: `col-${2}`,
      value: '300x250 Medium Rectangle'
    },
    {
      key: `col-${3}`,
      value: '1 Mar 2016'
    },
    {
      key: `col-${4}`,
      value: '$7'
    },
    {
      key: `col-${5}`,
      value: '$10'
    },
    {
      key: `col-${6}`,
      value: '$12,500'
    }
  ]
];

我有这个数组

z = [`col-${1}`,`col-${2}`,`col-${3}`,`col-${4}`,`col-${5}`, `col-${6}`]

并且我希望这些数据按照在col-${1}上分组时进行分组

[
  'VEH1' : [
  [
    {
      key: `col-${1}`,
      value: 'VEH1'
    },
    {
      key: `col-${2}`,
      value: '300x250 Medium Rectangle'
    },
    {
      key: `col-${3}`,
      value: '1 Mar 2016'
    },
    {
      key: `col-${4}`,
      value: '$7'
    },
    {
      key: `col-${5}`,
      value: '$10'
    },
    {
      key: `col-${6}`,
      value: '$12,500'
    }
  ],
  [
    {
      key: `col-${1}`,
      value: 'VEH1'
    },
    {
      key: `col-${2}`,
      value: '300x250 Medium Rectangle'
    },
    {
      key: `col-${3}`,
      value: '1 Mar 2016'
    },
    {
      key: `col-${4}`,
      value: '$7'
    },
    {
      key: `col-${5}`,
      value: '$10'
    },
    {
      key: `col-${6}`,
      value: '$12,500'
    }
  ],
  [
    {
      key: `col-${1}`,
      value: 'VEH1'
    },
    {
      key: `col-${2}`,
      value: '300x250 Medium Rectangle'
    },
    {
      key: `col-${3}`,
      value: '1 Mar 2016'
    },
    {
      key: `col-${4}`,
      value: '$7'
    },
    {
      key: `col-${5}`,
      value: '$10'
    },
    {
      key: `col-${6}`,
      value: '$12,500'
    }
   ]
  ]
  VEH2: [
    [
    {
      key: `col-${1}`,
      value: 'VEH2'
    },
    {
      key: `col-${2}`,
      value: '300x250 Medium Rectangle'
    },
    {
      key: `col-${3}`,
      value: '1 Mar 2016'
    },
    {
      key: `col-${4}`,
      value: '$7'
    },
    {
      key: `col-${5}`,
      value: '$10'
    },
    {
      key: `col-${6}`,
      value: '$12,500'
    }
  ],
  [
    {
      key: `col-${1}`,
      value: 'VEH2'
    },
    {
      key: `col-${2}`,
      value: '300x250 Medium Rectangle'
    },
    {
      key: `col-${3}`,
      value: '1 Mar 2016'
    },
    {
      key: `col-${4}`,
      value: '$7'
    },
    {
      key: `col-${5}`,
      value: '$10'
    },
    {
      key: `col-${6}`,
      value: '$12,500'
    }
  ]
    ]
];

如何使用 lodash groupby 或其他函数对这些数据进行分组。

【问题讨论】:

    标签: javascript ecmascript-6 lodash


    【解决方案1】:

    您可以使用哈希表来引用想要的组。

    var x = [[{ key: `col-${1}`, value: 'VEH1' }, { key: `col-${2}`, value: '300x250 Medium Rectangle' }, { key: `col-${3}`, value: '1 Mar 2016' }, { key: `col-${4}`, value: '$7' }, { key: `col-${5}`, value: '$10' }, { key: `col-${6}`, value: '$12,500' }], [{ key: `col-${1}`, value: 'VEH1' }, { key: `col-${2}`, value: '300x250 Medium Rectangle' }, { key: `col-${3}`, value: '1 Mar 2016' }, { key: `col-${4}`, value: '$7' }, { key: `col-${5}`, value: '$10' }, { key: `col-${6}`, value: '$12,500' }], [{ key: `col-${1}`, value: 'VEH1' }, { key: `col-${2}`, value: '300x250 Medium Rectangle' }, { key: `col-${3}`, value: '1 Mar 2016' }, { key: `col-${4}`, value: '$7' }, { key: `col-${5}`, value: '$10' }, { key: `col-${6}`, value: '$12,500' }], [{ key: `col-${1}`, value: 'VEH2' }, { key: `col-${2}`, value: '300x250 Medium Rectangle' }, { key: `col-${3}`, value: '1 Mar 2016' }, { key: `col-${4}`, value: '$7' }, { key: `col-${5}`, value: '$10' }, { key: `col-${6}`, value: '$12,500' }], [{ key: `col-${1}`, value: 'VEH2' }, { key: `col-${2}`, value: '300x250 Medium Rectangle' }, { key: `col-${3}`, value: '1 Mar 2016' }, { key: `col-${4}`, value: '$7' }, { key: `col-${5}`, value: '$10' }, { key: `col-${6}`, value: '$12,500' }]],
        grouped = {};
    
    x.forEach((hash => a => {
        var key = a[0].value;
        if (!hash[key]) {
            hash[key] = [];
            grouped[key] = hash[key];
        }
        hash[key].push(a);
    })(Object.create(null)));
    
    console.log(grouped);

    【讨论】:

      【解决方案2】:

      如果不强制执行col-${n} 的顺序,这将起作用:

      var output = _.groupBy(x, arr => _.find(arr, { key: `col-${1}` }).value);
      

      否则你可以先在z中查找,

      var output = _.groupBy(x, _.indexOf(z, `col-${1}`) + '.value');
      

      var x = [[{ key: `col-${1}`, value: 'VEH1' }, { key: `col-${2}`, value: '300x250 Medium Rectangle' }, { key: `col-${3}`, value: '1 Mar 2016' }, { key: `col-${4}`, value: '$7' }, { key: `col-${5}`, value: '$10' }, { key: `col-${6}`, value: '$12,500' }], [{ key: `col-${1}`, value: 'VEH1' }, { key: `col-${2}`, value: '300x250 Medium Rectangle' }, { key: `col-${3}`, value: '1 Mar 2016' }, { key: `col-${4}`, value: '$7' }, { key: `col-${5}`, value: '$10' }, { key: `col-${6}`, value: '$12,500' }], [{ key: `col-${1}`, value: 'VEH1' }, { key: `col-${2}`, value: '300x250 Medium Rectangle' }, { key: `col-${3}`, value: '1 Mar 2016' }, { key: `col-${4}`, value: '$7' }, { key: `col-${5}`, value: '$10' }, { key: `col-${6}`, value: '$12,500' }], [{ key: `col-${1}`, value: 'VEH2' }, { key: `col-${2}`, value: '300x250 Medium Rectangle' }, { key: `col-${3}`, value: '1 Mar 2016' }, { key: `col-${4}`, value: '$7' }, { key: `col-${5}`, value: '$10' }, { key: `col-${6}`, value: '$12,500' }], [{ key: `col-${1}`, value: 'VEH2' }, { key: `col-${2}`, value: '300x250 Medium Rectangle' }, { key: `col-${3}`, value: '1 Mar 2016' }, { key: `col-${4}`, value: '$7' }, { key: `col-${5}`, value: '$10' }, { key: `col-${6}`, value: '$12,500' }]],
          z = [`col-${1}`,`col-${2}`,`col-${3}`,`col-${4}`,`col-${5}`, `col-${6}`];
      
      var output = _.groupBy(x, _.indexOf(z, `col-${1}`) + '.value');
      
      console.log(output);
      <script src="https://cdn.jsdelivr.net/lodash/4.13.1/lodash.min.js"></script>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-01
        • 2016-10-06
        • 2021-05-04
        • 1970-01-01
        • 2018-01-09
        • 2020-05-14
        相关资源
        最近更新 更多