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

89
Vistas
filtrar una matriz anidada de objetos usando javascript

Tengo dificultades para filtrar una matriz anidada de objetos. ¿Alguien puede decirme dónde me estoy equivocando?

Aquí están los datos y quiero filtrar todos los objetos que tienen riesgo P1

 { "title": "QA", "rows": [ { "risk": "P1", "Title": "Server down", }, { "risk": "P3", "Title": "Permission issue", } ] }, { "title": "Prod", "rows": [ { "risk": "P5", "Title": "Console log errors fix", }, { "risk": "P1", "Title": "Server is in hung state", } ] } ]

quiero el resultado de la siguiente manera

 [ { "title": "QA", "rows": [ { "risk": "P1", "Title": "Server down", } ] }, { "title": "Prod", "rows": [ { "risk": "P1", "Title": "Server is in hung state", } ] } ]

Para lograr esto, lo intenté de esta manera pero no pude obtener el resultado deseado. ¿Alguien puede decirme dónde me equivoco?

 data.forEach((element, index) => { return element.rows.filter( x => x.risk === 'P1' ) });
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Debe usar map() y filter() .

 const input = [ { title: "QA", rows: [ { risk: "P1", Title: "Server down", }, { risk: "P3", Title: "Permission issue", }, ], }, { title: "Prod", rows: [ { risk: "P5", Title: "Console log errors fix", }, { risk: "P1", Title: "Server is in hung state", }, ], }, ]; const output = input.map((obj) => ({ ...obj, rows: obj.rows.filter((row) => row.risk === "P1"), })); console.log(output);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

Explicación

Desea devolver un objeto para cada uno de los valores del objeto original, es decir, un mapeo 1:1 , por lo que su operación principal es map() .

Luego, desea devolver el mismo objeto, excepto que las rows de propiedades solo deben contener las rows con risk === "P1" , por lo que debe filter() las filas y crear un nuevo objeto (debe tratar los objetos como inmutables ) con eso propiedad de rows actualizada.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Primero, su matriz original necesita una apertura [ . En lugar de usar Array#forEach use Array#map en su lugar. .forEach no devuelve ningún resultado, pero puede permitirle modificar la matriz original; .map por otro lado crea una nueva matriz.

 const input = [{ "title": "QA", "rows": [ { "risk": "P1", "Title": "Server down", }, { "risk": "P3", "Title": "Permission issue", } ] }, { "title": "Prod", "rows": [ { "risk": "P5", "Title": "Console log errors fix", }, { "risk": "P1", "Title": "Server is in hung state", } ] } ], filter = "P1", output = input.map( ({rows,...rest}) => ({...rest, rows: rows.filter(({risk}) => risk === filter)}) ); console.log( output );

Sin embargo, si su objetivo era modificar la matriz original, realice la siguiente modificación en su código original:

 const input = [{ "title": "QA", "rows": [ { "risk": "P1", "Title": "Server down", }, { "risk": "P3", "Title": "Permission issue", } ] }, { "title": "Prod", "rows": [ { "risk": "P5", "Title": "Console log errors fix", }, { "risk": "P1", "Title": "Server is in hung state", } ] } ], filter = "P1"; input.forEach((element,index) => { input[index] = {...element, rows: element.rows.filter( x => x.risk === filter )} }); console.log( input );

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