Tengo una matriz de objetos (propiedades) que necesito ordenar según varios criterios, 4 en total. He manejado dos de ellos, pero el segundo y el tercero me están dando problemas.
El orden de clasificación debe ser:
Primero: si una propiedad tiene un estado de "Activo", eso va antes de una propiedad con un estado de "Escrow", este es fácil porque puedo hacerlo alfabéticamente ya que "activo" va antes de "escrow".
2º - Si una propiedad tiene un tipo de propiedad de "Multifamiliar" que va antes que el resto (no funciona)
3º - Si una propiedad tiene un estado de "Terreno" que va antes que el resto (pero después de Multifamiliar, no funciona)
4º - Ordenar por número de Unidades, de nuevo, este es fácil.
Aquí está mi código hasta ahora, estoy usando una microbiblioteca para ordenar matrices, pero las funciones lógicas habituales de Array.sort funcionarán aquí, la biblioteca se llama thenBy.js:
No solo la clasificación "Multifamiliar" y "Land" no funciona, sino que también se duplican las entradas... Realmente no estoy seguro de cómo abordar esta.
const filtered_properties = [] filtered_properties.sort( firstBy(function(v1, v2) { if (v1.status > v2.status) { return 1; } else if (v1.status < v2.status) { return 0; } }) // Not working .thenBy(function(v1) { return ( v1["property-type"] && v1["property-type"][0].name === "Multifamily" ); }) // Not working .thenBy(function(v1) { return ( v1["property-type"] && v1["property-type"][0].name === "Land" ); }) .thenBy(function(v1, v2) { return v2.units - v1.units; }) ); <script src="https://cdn.jsdelivr.net/npm/thenby@1.3.4/thenBy.min.js"></script>Dependiendo de sus propiedades, puede comparar con la cadena superior deseada y tomar el delta de b - a de la comparación y, si necesita la cadena deseada en la parte inferior, cambie a y b .
Lo mismo se aplica a todas las demás comparaciones en las que un elemento debe ordenarse al principio.
array.sort((a, b) => (b.status === 'Active') - (a.status === 'Active') || (b.type === 'Multifamily') - (a.type === 'Multifamily') || (b.status === 'Land') - (a.status === 'Land') || a.units - b.units );