Alguien me preguntó cómo ordenar la siguiente matriz según las reglas del juego de cartas usando un método genérico. Según mi investigación sobre las reglas de los juegos de cartas, el número pequeño es lo primero y los nombres siempre se organizan como Jack, Queen, King.
Esta es la matriz de abajo
const cards = ['Jack', 8, 2, 6, 'King', 5, 3, 'Queen']Salida requerida
[2,3,5,6,8,'Jack','Queen','King']Así que acabo de escribir una función básica para ordenarlo así
function sortCard(){ cards.sort(); console.log(cards); } sortCard();Me dio la salida requerida
[2,3,5,6,8,'Jack','Queen','King']Aunque mi enfoque es incorrecto y no responde la pregunta.
Entonces, ¿cómo puedo ordenar la carta según las reglas del juego de cartas usando un método genérico?
bueno, puedes usar un objeto para atribuir un valor numérico a 'Jota' o 'Rey'
const reference={Jack:10,Queen:11,King:12,Ace:13} const cards = ['Jack', 8, 'Ace', 2, 6, 'King', 5, 3, 'Queen'] const sorter=(a,b)=>(reference[a]||a)-(reference[b]||b) //reference is only for words so if it's not one of the words, it choses the value itself to do the math console.log( cards.sort(sorter) )Aquí hay una función de clasificación simple
const sortOrder = [2,3,4,5,6,7,8,9,10,"Jack","Queen","King","Ace"] const cards = ['Jack', 8, 2, 6, 'King', 5, 3, 'Queen'] cards.sort((a,b) => sortOrder.indexOf(a) - sortOrder.indexOf(b)) console.log(cards)Puede pasar una función para ordenar para controlar la clasificación. Consulte los documentos de MDN para obtener más información.
Por ejemplo, si desea ordenar los meses del año:
function sortMonths(arrayOfMonths){ order = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] return [...arrayOfMonths].sort((a, b) => order.indexOf(a) - order.indexOf(b)) } console.log(sortMonths(['Dec', 'May', 'Jul', 'Jun']))