javascript - 如何按优先级对字符串数组进行排序?
问题描述
我想问一下如何对每个优先级电子邮件域的字符串数组进行排序?
例如,这是我的优先级列表
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']
有什么方法可以实现这一目标?
解决方案
您可以将域的顺序存储在一个数组中,然后在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)
推荐阅读
- mongodb - 仅显示在 MongoDB 中包含文档的集合
- java - FileNotFoundException 使用 Eclipse 编辑器
- tensorflow - 从机器学习中解读混淆矩阵的值
- xaml - Xamarin.Forms:当使用网格值设置大小时,微小的图标会变得如此轻微
- c# - 如何在单个解决方案文件中的两个 WebApp 中引用和使用相同的类库?
- linux - 使用 Openflow 的 ODL 镁合金
- spring - Spring Boot 微服务正在使用 Kubernetes 集群中的 pod 名称作为主机名注册到 Eureka - docker desktop
- mysql - 在非空列的空值重复键更新上插入 ...
- r - R ggplot2 - 底部的图例被剪切,如何动态找到图例的最佳列数?
- java - Assertj 3.16.1 中是否不推荐使用“hasOnlyElementsOfType”方法