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

JavaScript如何按预定义分组顺序结合main_contact属性排序参会人列表

参会人列表排序实现方案

实现逻辑

  • 先为每个参会人确定排序基准分组:遍历参会人所有所属分组,取预定义顺序sortOrder中索引最小的分组作为基准
  • 优先按基准分组的sortOrder索引升序排列,索引越小排名越靠前
  • 同一基准分组的参会人,main_contact为true的排在前面

完整实现代码

const sortAttendees = (attendees) => {
  const sortOrder = ["agency", "client", "production", "crew"];
  if (!attendees?.length) return [];
  // 获取单个参会人的排序优先级参数
  const getPriority = (attendee) => {
    let minOrder = Infinity;
    let isMain = false;
    attendee.groups.forEach(group => {
      const order = sortOrder.indexOf(group.name);
      // 匹配到优先级更高的分组时更新基准信息
      if (order !== -1 && order < minOrder) {
        minOrder = order;
        isMain = group.main_contact;
      }
    });
    return { order: minOrder, isMain };
  };
  // 先拷贝原数组再排序,避免修改原始数据
  return [...attendees].sort((a, b) => {
    const priorityA = getPriority(a);
    const priorityB = getPriority(b);
    // 优先按分组顺序排序
    if (priorityA.order !== priorityB.order) {
      return priorityA.order - priorityB.order;
    }
    // 同分组下主联系人排前面
    return priorityB.isMain - priorityA.isMain;
  });
};

验证效果

传入你提供的测试数据调用该函数,返回结果与预期输出完全匹配:

const attendees = [
  {
    name: "Peter",
    groups: [{ name: "agency", main_contact: false, stand_in_contact: true }],
  },
  {
    name: "Alex",
    groups: [{ name: "agency", main_contact: true, stand_in_contact: false }],
  },
  {
    name: "Nina",
    groups: [
      { name: "production", main_contact: true, stand_in_contact: false },
    ],
  },
  {
    name: "Christina",
    groups: [
      { name: "client", main_contact: true, stand_in_contact: false },
      { name: "crew", main_contact: false, stand_in_contact: false },
    ],
  },
];
console.log(sortAttendees(attendees));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:57:03