Estoy averiguando si hay una mejor manera de ordenar la siguiente matriz.
El siguiente código ordena la matriz según la etiqueta y el dispositivo Registrado. si la etiqueta es Teléfono de escritorio y el dispositivo Registrado es verdadero, entonces debería tener prioridad.
Mi enfoque es como el siguiente.
const terminals = [ { "device":"JKJCF00", "directory":"+1899990000", "label":"Jabber", "deviceRegistered":"false" }, { "device":"IOP8999", "directory":"9099886644", "label":"Desk Phone", "deviceRegistered":"false" }, { "device":"KLJ7888", "directory":"+8999999", "label":"Jabber", "deviceRegistered":"true" }, { "device":"VFD87987", "directory":"+12386444", "label":"Desk Phone", "deviceRegistered":"true" }] let term = [...terminals],arr=[],sortedLines = [],lineObj ={}; term.forEach(line => arr.indexOf(line.label)===-1 ? arr.push(line.label):''); arr.forEach(device => { let filterArr = term.filter(line => line.label === device) let sortArr = [...filterArr].sort((dev1,dev2) => dev1.deviceRegistered !== 'true' ? 1 : dev2.deviceRegistered !== 'true' ? -1 : 0) lineObj[device] = sortArr }) for (line in lineObj){ console.log(lineObj[line]) sortedLines.push(...lineObj[line]) } }la salida es
[ { "device":"KLJ7888", "directory":"+8999999", "label":"Jabber", "deviceRegistered":"true" }, { "device":"JKJCF00", "directory":"+1899990000", "label":"Jabber", "deviceRegistered":"false" }, { "device":"VFD87987", "directory":"+12386444", "label":"Desk Phone", "deviceRegistered":"true" }, { "device":"IOP8999", "directory":"9099886644", "label":"Desk Phone", "deviceRegistered":"false" } ]Puede verificar las propiedades y usar el delta de los valores booleanos.
const array = [ { device: "JKJCF00", directory: "+1899990000", label: "Jabber", deviceRegistered: "false" }, { device: "IOP8999", directory: "9099886644", label: "Desk Phone", deviceRegistered: "false" }, { device: "KLJ7888", directory: "+8999999", label: "Jabber", deviceRegistered: "true" }, { device: "VFD87987", directory: "+12386444", label: "Desk Phone", deviceRegistered: "true" } ]; array.sort((a, b) => (b.label === 'Desk Phone') - (a.label === 'Desk Phone') || (b.deviceRegistered === 'true') - (a.deviceRegistered === 'true') ); console.log(array); .as-console-wrapper { max-height: 100% !important; top: 0; }Suposición: soy el autor de esta biblioteca, pero creé sort-es exactamente para simplificar la clasificación de matrices.
Si estás interesado: documentos GH
import { byValues, byString, byValue, byBoolean } from "sort-es" const terminals = [] //...items const sorted = terminals.sort(byValues([ ["label", byString()], ["deviceRegistered", byValue(d => d === 'true', byBoolean())] ]))