Hola Pedro en el ejercicio 1 tu código resuelve exactamente lo que se pedía.
Sobre la duda de por qué si colocar miArrayOriginal obtienes siempre la ordenación de menor a mayor, la respuesta que le daría (no lo consideres un 100% seguro) es la siguiente:
La función sort modifica el array sobre el que se aplica, de ahí que en el ejercicio se trabaje con distintas copias, de esta manera lo que se haga con cada copia no afecta a las otras.
Si escribes esto:
deMayorAMenor = miArrayOriginal.sort(function(elem1, elem2){return elem2-elem1;});
deMenorAMayor = miArrayOriginal.sort(function(elem1, elem2){return elem1-elem2;});
Estarías diciendo: deMayorAMenor contiene el array miArrayOriginal (que después de aplicar sort queda de determinada manera)
deMenorAMayor contiene el array miArrayOriginal (que después de aplicar sort queda de determinada manera)
Tanto deMayorAMenor como deMenorAMayor estarían apuntando a lo mismo: al objeto miArrayOriginal. Por eso cuando los muestras por pantalla ves lo mismo, porque están apuntando a lo mismo.
En este caso se trataría de un detalle de la función sort: no te devuelve algo nuevo, sino que modifica el array sobre el que se aplica.
Para el ejercicio 2 había distintas maneras de resolverlo, tú lo has hecho usando localeCompare() que por su definición:
The localeCompare() method compares two strings in the current locale.
The locale is based on the language settings of the browser.
The localeCompare() method returns a number indicating whether the string comes before, after or is equal as the compareString in sort order.
Tu solución funciona bien y ser capaces de resolver problemas que se nos plantean es positivo así que por mi parte lo veo bien.
Saludos