en ES2015, Javascript, Programación Funcional

Cómo ordenar un array de strings según unas prioridades específicas

El otro día en un proyecto me surgió la necesidad de dejar preparado un código para que dado un array de strings, éste quedara ordenado en base a unas prioridades especificas.

Por ejemplo, dado un array de tipos de media (obtenido por ejemplo a través de una consulta a una API), me interesa que los tipo “foto” queden siempre al principio del array,  luego los tipo “audio”, etc…

Otro caso típico es el de ordenar paises para un dropdown, donde por ejemplo puedo querer que determinados paises aparezcan siempre primero (por ejemplo “Spain”, “France”, “Italy”) y todo lo que no esté en mi lista de “primeros” quede ordenado alfabeticamente

Al final, generalizando, me interesa poder ordenar un array de strings en base a un criterio personalizado y todo lo que no esté en ese criterio quede ordenado alfabeticamente.

Para esto me monté una función factory creadora de funciones “que ordenan en base a un array de prioridades” lista para pasársela como callback al método sort del prototype de array.

Aqui teneis el código en ES2015 de esta función factory y de su aplicación:

Y aqui teneis el código en ES5:

Y aqui podeis verlo en funcionamiento con unos cuantos tests: