Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

138
Vistas
¿La mejor manera de reorganizar una matriz de objetos?

Tengo una matriz u objeto que servirá como columnas para una tabla con una clave única

 const list = [{ key: "Name", textColor: "red" },{ key: "Age", textColor: "green" },{ key: "Occupation", textColor: "yellow" }]

Y tengo una lista de ordenamiento de columnas en la tabla.

 const newOrder = ["Occupation", "Name", "Age"]

Ahora, ¿cómo puedo reorganizar la lista de acuerdo con el nuevo orden sin usar nested loops ? Además, todos estos son dinámicos, por lo que no se trata solo de las tres columnas mencionadas anteriormente

Rendimiento esperado

 const list = [{ key: "Occupation", textColor: "yellow" },{ key: "Name", textColor: "red" },{ key: "Age", textColor: "green" }]
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Puedes usar solo ordenación regular

 const list = [{key: "Name",textColor: "red"},{key: "Age",textColor: "green"},{key: "Occupation",textColor: "yellow"}]; const newOrder = ["Occupation", "Name", "Age"]; const result = list.sort(({key: a}, {key: b}) => newOrder.indexOf(a) - newOrder.indexOf(b)); console.log(result);
 .as-console-wrapper{min-height: 100%!important; top: 0}

about 4 years ago · Juan Pablo Isaza Denunciar

0

Su lista se puede reformatear a un objeto javascript normal en el que la key es el nombre de la propiedad y textColor es el valor:

 const toObject = kvps => Object.fromEntries(kvps.map(kvp => [ kvp.key, kvp.textColor ]));

Con una matriz dada de claves, puede elegir valores de ese objeto de la siguiente manera:

 const fromObject = (order, obj) => order.map(key => ({ key, textColor: obj[key] }));

Encadene los dos y podrá reordenar cualquier lista de pares de valores clave:

 const list = [{ key: "Name", textColor: "red" },{ key: "Age", textColor: "green" },{ key: "Occupation", textColor: "yellow" }] const toObject = kvps => Object.fromEntries(kvps.map(kvp => [ kvp.key, kvp.textColor ])); const fromObject = (order, obj) => order.map(key => ({ key, textColor: obj[key] })); const reorder = (order, kvps) => fromObject(order, toObject(kvps)); const newList = reorder(["Occupation", "Name", "Age"], list); console.log( newList )

Editar: si los tamaños de su lista y las matrices de pedidos son pequeños, probablemente desee optar por el enfoque mucho más fácil de leer sugerido por Jon Webb en una de las otras respuestas. 🙂 Traté de mantener mi solución en una complejidad O(n + m) en lugar de O(n * m), (n = tamaño de la lista, m = tamaño del pedido) pero probablemente no valga la pena la complejidad adicional.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede iterar en la lista de "pedidos", encontrar el elemento correspondiente en la lista original y enviar el elemento a la nueva lista en ese orden:

 const orderList = (list, order) => { const newList = []; for (key of order) { const item = list.find((obj) => obj.key == key); if (item) newList.push(item); } return newList; }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda