【问题标题】:A function which return employees with the highest employee count in the department in JavaScript在 JavaScript 中返回部门中员工人数最多的员工的函数
【发布时间】:2022-02-17 22:41:03
【问题描述】:

我是编程和解决逻辑构建练习的初学者。

我有很多员工。 Like This One(实际数组有更多数据,这只是一个例子):

let arr = [
  {
    name: 'Tom',
    department: {
      name: 'admin',
    },
  },
  {
    name: 'Chris',
    department: {
      name: 'account',
    },
  },
];

现在我想返回部门中人数最多的员工

我统计了每个部门的员工人数

const counts = {};
employees.forEach( (employee)=>{
  counts[employee.department.name] = (counts[employee.department.name] || 0) + 1;
});


console.log(counts) // { Accounts: 1, admin: 1 }

但我想返回 Department 中数量最多的员工,而不是我想返回每个员工对象的员工数量。

这是预期的输出:

{
  name: 'Employee1'
  {
    department:'Admin'
  }
},
{
    name: 'Employee2'
  {
    department:'Admin'
  }
},
{
    name: 'Employee3'
  {
    department:'Admin'
  }
}

我只需要一个关于下一步做什么的指南。

谢谢

【问题讨论】:

  • 所以推送到数组而不是计数。最大的数字将是最长的数组
  • 你能举一个预期返回对象的例子吗?
  • @maxpsz 我已经更新了我的问题,现在也有预期的输出,感谢您的时间。
  • 因为你已经有了部门数,你可以很容易地确定部门数最高的部门,现在你可以简单地使用 filter() 过滤掉在该部门工作的员工:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

标签: javascript node.js filter foreach


【解决方案1】:

我将员工按部门存储在一个对象(哈希图)中,而不是数字。 然后为了提​​取最大的一个,我创建了一个函数,它返回一个包含部门和员工列表的对象。

请随意运行下面的代码并查看结果。

let employees = [
  {
    name: "Tom",
    department: {
      name: "admin"
    }
  },
  {
    name: "Chris",
    department: {
      name: "account"
    }
  }
];

const counts = {};
employees.forEach((employee) => {
  counts[employee.department.name] = (
    counts[employee.department.name] || []
  ).concat(employee.name);
});

console.log(counts); // {admin: ['Tom'], account: ['Chris']}


function getLargest(map) {
  let max = 0;
  let biggestDepartment = null;
  Object.entries(map).forEach(([department, arr]) => {
    if (max < arr.length) {
      max = arr.length;
      biggestDepartment = department;
    }
  });

  return {
    name: biggestDepartment,
    employees: map[biggestDepartment]
  }
}

console.log(getLargest(counts))

【讨论】:

    【解决方案2】:

    所以我的解决方案是,您首先将员工按 w.r.t 分组。部门,然后您可以使用 .length 属性获取员工人数最多的部门。

    const getGroupDepartments = (employees) => {
      const groupedDepartments = {};
      employees?.forEach((employee) => {
        groupedDepartments[employee.department.name] = groupedDepartments[employee.department.name] ? 
          [...groupedDepartments[employee.department.name], employee] : [employee]
      });
      return groupedDepartments
    }
    
    const getLargestDepartment = (employees) => {
      const departments = getGroupDepartments(employees)
    
      let largestDepartment;
      for (const department in departments) {
        if(largestDepartment?.length < departments[department].length || !largestDepartment){
          largestDepartment = departments[department]
        }  
      }
      return largestDepartment
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-23
      • 2012-08-02
      相关资源
      最近更新 更多