You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Handlebars按职位分组展示员工数组?是否可行?

如何用Handlebars实现员工按职位分组展示?

当然可行!其实你离成功只差一步——先在JavaScript层面把员工数组按职位分组,因为Handlebars本身没有内置的分组助手,但我们可以先整理好数据结构,再用模板渲染就简单多了。

第一步:先处理你的原始数据

你需要把平铺的员工数组转换成「以职位为键,对应员工数组为值」的对象。写个简单的分组函数就行:

// 定义分组函数
function groupByPosition(employees) {
  return employees.reduce((groups, employee) => {
    const position = employee.position;
    // 如果当前职位还没在分组里,先创建空数组
    if (!groups[position]) {
      groups[position] = [];
    }
    // 把员工加入对应职位的数组
    groups[position].push(employee);
    return groups;
  }, {});
}

// 用你的员工数组调用函数,得到分组后的数据
const groupedEmployees = groupByPosition(employee);
// 把处理好的数据传入模板上下文
const context = { people: groupedEmployees };

如果想要输出的职位顺序和你示例里的(Head → instructor → TA)完全一致,可以稍微调整分组函数,指定顺序:

// 按你想要的顺序定义职位
const desiredOrder = ['head', 'instructor', 'TA'];
function groupByPosition(employees) {
  // 先创建符合顺序的空分组
  const groups = desiredOrder.reduce((acc, pos) => {
    acc[pos] = [];
    return acc;
  }, {});
  // 把员工分配到对应分组
  employees.forEach(employee => {
    if (groups[employee.position]) {
      groups[employee.position].push(employee);
    }
  });
  return groups;
}

第二步:修改Handlebars模板

现在你的people已经是分组后的对象了,用{{#each}}遍历对象时,@key就是职位名称,this就是该职位下的员工数组,模板可以这么写:

{{#each people}}
  <h2>{{@key}}</h2>
  <ul class="people_list">
    {{#each this}}
      <li id="{{name}}">{{name}}</li>
    {{/each}}
  </ul>
{{/each}}

为什么你之前的代码不行?

你之前传入模板的people还是原始的平铺员工数组,Handlebars遍历数组时,@key是数组的索引(0、1、2...),而不是职位名称,所以才会输出不对。只要先把数据转换成分组后的对象,问题就解决啦!

内容的提问来源于stack exchange,提问作者Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:09:06