首页 > 解决方案 > 如何按优先级对字符串数组进行排序?

问题描述

我想问一下如何对每个优先级电子邮件域的字符串数组进行排序?

例如,这是我的优先级列表

1st: gmail.com
2nd: outlook.com
3rd: yahoo.com
4th: hotmail.com
5th: live.com
6th: Other Domain

所以,如果这是我的字符串

const personalEmail = ['email@yahoo.com','email@live.com','email@other.com','email@gmail.com','email@outlook.com']

有什么方法可以实现这一目标?

标签: javascriptarrayssorting

解决方案


您可以将域的顺序存储在一个数组中,然后在sort回调中,减去两个域在数组中的索引以确定优先级。

如果其中一个索引是-1,则将另一项排序在其域不在数组中的项之前。

const domainPrecedence = ['gmail.com', 'outlook.com', 'yahoo.com', 'hotmail.com', 'live.com']

const personalEmail = ['email@yahoo.com', 'email@live.com', 'email@other.com', 'email@gmail.com', 'email@outlook.com']


const sorted = personalEmail.sort((a, b) => {
  let index1 = domainPrecedence.indexOf(a.split('@')[1])
  let index2 = domainPrecedence.indexOf(b.split('@')[1])
  return index1 == -1 ? 1 : index2 == -1 ? -1 : index1 - index2;
})

console.log(sorted)


推荐阅读