Me gustaría preguntar cómo podría ordenar una serie de cadenas por dominio de correo electrónico de prioridad.
Por ejemplo, esta es mi lista de prioridades.
1st: gmail.com 2nd: outlook.com 3rd: yahoo.com 4th: hotmail.com 5th: live.com 6th: Other DomainEntonces, si esta es mi cadena
const personalEmail = ['email@yahoo.com','email@live.com','email@other.com','email@gmail.com','email@outlook.com']¿Cuáles son las formas de lograr esto?
Puede almacenar el orden de los dominios en una matriz, luego en la devolución de llamada de sort , reste el índice de los dos dominios en la matriz para determinar la precedencia.
Si uno de los índices es -1 , ordene el otro elemento antes de aquel cuyo dominio no estaba en la matriz.
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)Esto supone que other.com significa que podría ser cualquier otro dominio.
const priority = [ 'gmail.com', 'outlook.com', 'yahoo.com', 'hotmail.com', 'live.com', ]; const personalEmail = [ 'email@yahoo.com', 'email@live.com', 'lasvegas@baby.com', 'email@other.com', 'email@gmail.com', 'email@outlook.com', ]; console.log( personalEmail.sort((a, b) => { const firstIndex = priority.indexOf(a.split('@')[1]); const secondIndex = priority.indexOf(b.split('@')[1]); return ( (firstIndex === -1 ? 5 : firstIndex) - (secondIndex === -1 ? 5 : secondIndex) ); }), );