Estoy tratando de ordenar la matriz por mayor valor, de menor a mayor, pero aquellos con calificación 0 se ordenan después del mayor valor, y luego de mayor a menor por precio
const product = [ {mostValued:5, price: 5}, {mostValued:0, price: 14}, {mostValued:0, price: 58}, {mostValued:3, price: 33}, {mostValued:0, price: 25}, {mostValued:4, price: 47}, ] // code product.sort((a, b) => a.mostValued == b.mostValued ? b.price - a.price : a.mostValued - b.mostValued );Aquellos con 0 estrellas deben ordenarse después, de mayor a menor por precio, por lo que el resultado esperado sería
[ {mostValued:3, price: 33}, {mostValued:4, price: 47}, {mostValued:5, price: 5}, {mostValued:0, price: 58}, {mostValued:0, price: 25}, {mostValued:0, price: 14} ];La forma más fácil sería unir 0 s (¿y otros valores falsos?) a Infinity :
product.sort((a, b) => (a.mostValued || Infinity) - (b.mostValued || Infinity) || b.price - a.price ); Alternativamente, dé prioridad específicamente a aquellos con mostValued == 0 :
product.sort((a, b) => (a.mostValued == 0) - (b.mostValued == 0) || a.mostValued - b.mostValued || b.price - a.price );