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

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

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 Report

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 Report

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 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!