【问题标题】:Group the class and Count users using lodash/Javascript使用 lodash/Javascript 对班级进行分组并统计用户
【发布时间】:2019-03-20 22:09:19
【问题描述】:

得到一个数组列表,其中包含参加过的课程和用户的列表;需要一个输出,通过对课程分组并计算总用户数来显示参加过的用户;

var arrList = [
  { class: 'one', user: 'user1' },
  { class: 'two', user: 'user1' },
  { class: 'two', user: 'user2' },
  { class: 'one', user: 'user3' },
  { class: 'two', user: 'user3' },
  { class: 'three', user: 'user1' },
  { class: 'four', user: 'user1' }
];

// output
[
  { class: 'one', user: [ 'user1', 'user2', 'user3' ], count: 3 },
  { class: 'two', user: [ 'user1', 'user3' ], count: 2 },
  { class: 'three', user: [ 'user1' ], count: 1 },
  { class: 'four', user: [ 'user1' ], count: 1 } 
];

【问题讨论】:

    标签: javascript jquery lodash


    【解决方案1】:

    使用_.groupBy()通过class键收集对象,然后映射到需要的形式。

    链式解决方案(需要完全导入 lodash 包):

    const arrList = [{"class":"one","user":"user1"},{"class":"two","user":"user1"},{"class":"two","user":"user2"},{"class":"one","user":"user3"},{"class":"two","user":"user3"},{"class":"three","user":"user1"},{"class":"four","user":"user1"}];
    
    const result = _(arrList)
      .groupBy('class')
      .map((group, key) => ({
        class: key,
        user: _.map(group, 'user'),
        count: group.length
      }))
      .value();
      
    console.log(result);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

    使用_.flow() 的解决方案(可以从 lodash 包中导入您需要的内容):

    const { flow, partialRight: pr, groupBy, map } = _; // replace with imports in your project
    
    const fn = flow(
      pr(groupBy, 'class'),
      pr(map, (group, key) => ({
        class: key,
        user: map(group, 'user'),
        count: group.length
      }))
    );
      
    const arrList = [{"class":"one","user":"user1"},{"class":"two","user":"user1"},{"class":"two","user":"user2"},{"class":"one","user":"user3"},{"class":"two","user":"user3"},{"class":"three","user":"user1"},{"class":"four","user":"user1"}];
    
    const result = fn(arrList);
      
    console.log(result);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

    【讨论】:

    • 如果必须使用简单的 javascript 来实现。方法是什么?哈希表?地图?
    • 缩减为一个对象或一个 Map,然后是 Object.values 或 Map.values 并展开。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 2022-01-12
    • 2016-10-09
    相关资源
    最近更新 更多