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

156
Vistas
¿Cómo organizar una matriz con objetos basados en otra matriz?

Tengo esta matriz desordenada (que contiene objetos)

 toSortArray = [{taskID: 1, "title": "something1", subtasks: {}}, {taskID: 5, "title": "something5", subtasks: {}}, {taskID: 8, "title": "something8", subtasks: {}}];

y tengo esta matriz que se completa dinámicamente en función del posicionamiento correcto de los ID de tareas

 sortingArray = [8, 1, 5];

Lo que estoy tratando de hacer es ordenar 'toSortArray' con exactamente el mismo orden que se indica en 'sortingArray'.

He encontrado una solución algo llamada aquí que indica esto:

 var arr = ['one','four','two']; var test = [{ key: 'one' },{ key: 'two' },{ key: 'four' }]; function sortFunction(a,b){ var indexA = arr.indexOf(a['key']); var indexB = arr.indexOf(b['key']); if(indexA < indexB) { return -1; }else if(indexA > indexB) { return 1; }else{ return 0; } }

Sin embargo, no funciona para mí. Reemplacé los marcadores de posición para:

 function sortFunction (a,b) { var indexA = sortingArray.indexOf(a["taskID"]); console.log(indexA); var indexB = sortingArray.indexOf(b["taskID"]); console.log(indexB); if (indexA < indexB) { return -1; } else if (indexA > indexB) { return 1; } else { return 0; } }

Cuando depuré (como puede ver, estoy registrando en la consola indexA e indexB). Siempre devuelven -1, lo que significa que no se encuentra dicho índice.

Mi pregunta es cómo llegar a comparar el valor "taskID" y los elementos sortingArray.

Gracias :)

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Descargo de responsabilidad: en los ejemplos, eliminé propiedades que no son relevantes para la pregunta y también cambié el nombre de taskID a tID por brevedad.

Puede usar Array.prototype.reduce para lograr el resultado deseado:

 let arr = [{tID: 1},{tID: 5},{tID: 8}]; let sArr = [8, 1, 5]; const result = sArr.reduce((a,v) => a.concat(arr.find(({tID})=>tID===v)), []); console.log(result);

También puede usar Array.prototype.sort :

 let arr = [{tID: 1},{tID: 5},{tID: 8}]; let sArr = [8, 1, 5]; const result = arr.sort( ({tID: aID}, {tID: bID}) => sArr.indexOf(aID) - sArr.indexOf(bID)); console.log(result);

Array.prototype.map también hará el trabajo:

 let arr = [{tID: 1},{tID: 5},{tID: 8}]; let sArr = [8, 1, 5]; const result = sArr.map(i => arr.find(({tID}) => tID === i)); console.log(result);

map y reduce probablemente funcionarán más rápido que sort porque cada iteración solo requiere una única búsqueda ( find ) en toSortArray , a diferencia de sort , que requiere dos búsquedas ( indexOf ).

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede filtrar toSortArray en función de cada uno de los valores del elemento sortingArray . El uso de filter devolverá una matriz de un elemento que coincida con el valor actual. Dado que filter devuelve una matriz, use flatMap() para iterar sobre sortingArray y devolver una única matriz ordenada en el orden de sortingArray .

 const toSortArray = [{taskID: 1, "title": "something1", subtasks: {}}, {taskID: 5, "title": "something5", subtasks: {}}, {taskID: 8, "title": "something8", subtasks: {}}]; const sortingArray = [8, 1, 5]; const result = sortingArray.flatMap(so=>toSortArray.filter(ts=>ts.taskID === so)); console.log(result);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede usar el mapa y buscar como:

 toSortArray = [{ taskID: 1, "title": "something1", subtasks: {} }, { taskID: 5, "title": "something5", subtasks: {} }, { taskID: 8, "title": "something8", subtasks: {} }]; sortingArray = [8, 1, 5]; const result = sortingArray.map((item) => toSortArray.find((element) => element.taskID === item)); console.log(result);
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