Necesito ordenar una matriz de cadenas, pero lo necesito para que nulo sea siempre el último. Por ejemplo, la matriz:
var arr = [a, b, null, d, null] Cuando se ordena de forma ascendente, necesito que se ordene como [a, b, d, null, null] y cuando se ordena de manera descendente, necesito que se ordene como [d, b, a, null, null] .
es posible? Probé la solución que se encuentra a continuación, pero no es exactamente lo que necesito.
Echa un vistazo a .sort() y hazlo con una clasificación personalizada. Ejemplo
function alphabetically(ascending) { return function (a, b) { // equal items sort equally if (a === b) { return 0; } // nulls sort after anything else else if (a === null) { return 1; } else if (b === null) { return -1; } // otherwise, if we're ascending, lowest sorts first else if (ascending) { return a < b ? -1 : 1; } // if descending, highest sorts first else { return a < b ? 1 : -1; } }; } var arr = [null, 'a', 'b', null, 'd']; console.log(arr.sort(alphabetically(true))); console.log(arr.sort(alphabetically(false)));Use una función de comparación personalizada que discrimine los valores null :
arr.sort(function(a, b) { return (a===null)-(b===null) || +(a>b)||-(a<b); }); Para el orden descendente de los valores no nulos, simplemente intercambie a y b en la comparación directa:
arr.sort(function(a, b) { return (a===null)-(b===null) || -(a>b)||+(a<b); });ascendente
arr.sort((a, b) => (a != null ? a : Infinity) - (b != null ? b : Infinity))Descendente
arr.sort((a, b) => (b != null ? b : -Infinity) - (a != null ? a : -Infinity))(Para el orden descendente si no tiene valores negativos en la matriz, recomiendo usar 0 en lugar de -Infinito)