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

如何按指定邮箱域名优先级对字符串数组进行排序

按指定邮箱域名优先级排序的实现方法

核心思路是给每个优先级域名分配权重值,优先级越高权重值越小,排序时提取邮箱的域名匹配对应权重,按权重升序排列即可。

方法1:固定权重映射实现(适合优先级不变的场景)

直接预定义域名和权重的映射关系,逻辑简单运行效率高:

// 域名权重映射:数值越小优先级越高
const domainPriority = {
  'gmail.com': 0,
  'outlook.com': 1,
  'yahoo.com': 2,
  'hotmail.com': 3,
  'live.com': 4,
  'other': 5
}

// 提取邮箱域名,自动处理大小写和无@的异常情况
const getDomain = (email) => {
  if (!email.includes('@')) return 'other'
  return email.split('@')[1].toLowerCase()
}

// 执行排序
const sortedEmails = personalEmail.sort((a, b) => {
  const weightA = domainPriority[getDomain(a)] ?? domainPriority.other
  const weightB = domainPriority[getDomain(b)] ?? domainPriority.other
  return weightA - weightB
})

用示例数组测试,输出结果为:
['email@gmail.com', 'email@outlook.com', 'email@yahoo.com', 'email@live.com', 'email@other.com'],完全符合要求的优先级顺序。

方法2:动态权重生成实现(适合优先级需调整的场景)

把优先级列表作为参数传入,动态生成权重映射,后续修改优先级只需要调整列表顺序即可,不需要修改核心逻辑:

// 优先级列表按从高到低排列,索引值即为对应权重
const priorityList = ['gmail.com', 'outlook.com', 'yahoo.com', 'hotmail.com', 'live.com']

const sortEmail = (emailList, priorityList) => {
  // 动态生成权重映射
  const priorityMap = Object.fromEntries(
    priorityList.map((domain, idx) => [domain.toLowerCase(), idx])
  )
  const defaultWeight = priorityList.length
  // 复制原数组避免sort修改原数据
  return [...emailList].sort((a, b) => {
    const domainA = a.includes('@') ? a.split('@')[1].toLowerCase() : ''
    const domainB = b.includes('@') ? b.split('@')[1].toLowerCase() : ''
    return (priorityMap[domainA] ?? defaultWeight) - (priorityMap[domainB] ?? defaultWeight)
  })
}

// 调用示例
const sortedEmails = sortEmail(personalEmail, priorityList)

注意事项

  • 所有域名统一转为小写匹配,避免Gmail.COM这类大小写不一致的场景匹配失败
  • 兼容了不含@的异常邮箱,统一归为其他域名排在最后
  • 方法2使用扩展运算符复制原数组,避免Array.sort的原地排序修改原数组数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:09:05