Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

150
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda