Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

135
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!