Estoy seguro de que me falta algo de lógica simple aquí y me está volviendo loco.
Estoy trabajando en Chrome v95.0.4638.69 y Firefox v93.0
Tengo una matriz de objetos donde los datos se ven así: [ {id: 1, nombre: "Jake", activo: verdadero}, {id: 2, nombre: "Sam", activo: falso}]
y mi función de comparación se ve así:
let compare = (a, b) => { const Aname = a.name.toUpperCase(); const Bname = b.name.toUpperCase(); if (a.active && b.active) { return Aname > Bname ? 1 : Aname < Bname ? -1 : 0; } else { return a.active ? 1 : -1; } };Lo que estoy tratando de hacer es que todos los objetos con active:true deben estar primero con el nombre ordenado alfabéticamente seguido de los objetos con active:false ordenados alfabéticamente. En Chrome hace exactamente eso. En Firefox, los objetos con activo = falso están en la parte superior de la lista. ¿Qué tonto error estoy cometiendo?
active , se debe devolver -1 si el primer objeto tiene la propiedad establecida en true para ordenarlo antes que el objeto con la propiedad establecida en false .0 incluso si los dos objetos deben considerarse iguales en la rama else . let compare = (a, b) => { const Aname = a.name.toUpperCase(); const Bname = b.name.toUpperCase(); if (a.active === b.active) { return Aname > Bname ? 1 : Aname < Bname ? -1 : 0; } else { return a.active ? -1 : b.active ? 1: 0; } };