Tengo un proyecto en el que recibo una lista de productos que luego agrupo por fabricante. Quiero mostrarlos mediante programación en la página, pero debo hacerlo en orden de mayor a menor cantidad de productos. Necesito idear un algoritmo para ordenar las claves de objeto de la mayoría de los productos a la menor cantidad de productos.
Aquí hay un ejemplo simplificado de lo que tengo y a dónde debo llegar:
let devices = { Sony: [ {name: 'Experia 1', productCode: 's1'}, {name: 'Experia 2', productCode: 's2'} ], Apple: [ {name: 'iPhone 8', productCode: 'a1'}, {name: 'iPhone 9', productCode: 'a2'}, {name: 'iPhone 10', productCode: 'a3'}, {name: 'iPhone 11', productCode: 'a4'} ], Huawei : [ {name: 'S 21', productCode: 'h1'} ], LG: [ {name: 'V60', productCode: 'l1'}, {name: 'V60 Ultra', productCode: 'l2'}, {name: 'G7', productCode: 'l3'} ] }Necesito ordenar los datos para que comience con el fabricante con más y luego descienda al fabricante con menos. Por lo tanto, debe modificarse para que se vea así:
{ Apple: [ {name: 'iPhone 8', productCode: 'a1'}, {name: 'iPhone 9', productCode: 'a2'}, {name: 'iPhone 10', productCode: 'a3'}, {name: 'iPhone 11', productCode: 'a4'} ], LG: [ {name: 'V60', productCode: 'l1'}, {name: 'V60 Ultra', productCode: 'l2'}, {name: 'G7', productCode: 'l3'} ] Sony: [ {name: 'Experia 1', productCode: 's1'}, {name: 'Experia 2', productCode: 's2'} ], Huawei : [ {name: 'S 21', productCode: 'h1'} ], }Los dispositivos que se ofrecen variarán con frecuencia, por lo que debo ordenar estos datos cada vez que el usuario acceda a la página. Por eso estoy buscando la sintaxis más corta posible para lograr esto.
Estoy encontrando tutoriales sobre cómo ordenar alfabéticamente las claves de los objetos y otros algoritmos relacionados de manera similar, pero ninguno que haga exactamente esto. Empecé a intentar personalizar algunos algoritmos de clasificación básicos, pero la manipulación de datos no es mi punto fuerte, por lo que están fallando o se están convirtiendo en un lío de códigos de espagueti inflados.
¿Hay una manera corta y fácil de convertir los datos como se describe? Tal vez haya un método de clasificación o un patrón de diseño que se adapte particularmente bien a la tarea. He estado investigando los comandos de lodash, pero no encuentro nada que salte inmediatamente como solución.
Estaría muy agradecido por cualquier consejo que alguien pudiera ofrecer. Gracias de antemano
Puede convertirlo en una matriz, ordenarlo por longitud y volver a convertirlo en un objeto.
let devices = { Sony: [ {name: 'Experia 1', productCode: 's1'}, {name: 'Experia 2', productCode: 's2'} ], Apple: [ {name: 'iPhone 8', productCode: 'a1'}, {name: 'iPhone 9', productCode: 'a2'}, {name: 'iPhone 10', productCode: 'a3'}, {name: 'iPhone 11', productCode: 'a4'} ], Huawei : [ {name: 'S 21', productCode: 'h1'} ], LG: [ {name: 'V60', productCode: 'l1'}, {name: 'V60 Ultra', productCode: 'l2'}, {name: 'G7', productCode: 'l3'} ] } devices = Object.fromEntries(Object.entries(devices).sort( (a,b) => b[1].length - a[1].length)); console.log(devices) Si está recorriendo el objeto, no lo volvería a convertir en un objeto, solo usaría Object.entries y generaría mis datos en función de eso.