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

264
Views
¿Cómo hacer una matriz a partir de dos matrices de columnas y filas en JS?

Tengo un formato de datos json:
[{'note':'n1','subject':'subject1','value':10},{'note':'n3','subject':'subject2','value':19}];
a partir de eso, generé dos matrices, una para columnas de cols y otra para rows

 let notes = [{'note':'n1','subject':'subject1','value':10},{'note':'n3','subject':'subject2','value':19}]; let cols = ['n1', 'n2', 'n3']; let rows = ['subject1', 'subject2']; let matrix = Array(cols.length).fill(Array(rows.length).fill(0)); for(const x of notes){ let {note, subject, value} = x; matrix[cols.indexOf(note)][rows.indexOf(subject)] = note; } console.log(matrix)

Resultado Esperado:

 [[10,0,0],[0,0,19]]

Pero mi objetivo es representarlo como una tabla HTML que se ve así:

Asunto\Nota Nota 1 Nota 2 Nota 3
Sujeto1 10 0 0
subj2 0 0 19

¿Cómo podría hacer eso? ¡Cualquier sugerencia o ayuda es muy apreciada!

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Puedo pensar en un par de maneras de hacerlo. Una forma sería forEach columnas y rows usando cols y encontrar el valor coincidente en las notes o devolver 0 para construir la matriz de la siguiente manera:

 let notes = [ {'note':'n1','subject':'subject1','value':10}, {'note':'n3','subject':'subject2','value':19} ] let cols = ['n1', 'n2', 'n3'] let rows = ['subject1', 'subject2'] let matrix = [] rows.forEach(row => { let newRow = [] cols.forEach(col => { newRow.push(notes.find(n => n.note === col && n.subject === row)?.value || 0) }) matrix.push(newRow) }) console.log(matrix)

Otro método podría ser usar reduce para recorrer cols y rows para obtener su matriz:

 let notes = [ {'note':'n1','subject':'subject1','value':10}, {'note':'n3','subject':'subject2','value':19} ] let cols = ['n1', 'n2', 'n3'] let rows = ['subject1', 'subject2'] let matrix = rows.reduce((accRow, row) => { accRow.push(cols.reduce((accCol, col) => { accCol.push(notes.find(n => n.note === col && n.subject === row)?.value || 0) return accCol }, [])) return accRow }, []) console.log(matrix)

about 4 years ago · Juan Pablo Isaza Report

0

Estás en el camino correcto. Solo algunos puntos:

  • Su intención es declarar y crear una matriz 2D, pero ese no es realmente el caso
  • Tienes rows y columns mezcladas
  • En lugar de = note , debe tener = value .

 let notes = [{'note':'n1','subject':'subject1','value':10},{'note':'n3','subject':'subject2','value':19}]; let cols = ['n1', 'n2', 'n3']; let rows = ['subject1', 'subject2']; let matrix = Array(rows.length).fill().map(() => Array(cols.length).fill(0)); for(const x of notes) { let {note, subject, value} = x; matrix[rows.indexOf(subject)][cols.indexOf(note)] = value; } console.log(matrix)

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!