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

122
Vistas
Tratar con bucles a través de matrices anidadas

Tengo una matriz de datos, que tiene matrices anidadas dentro (level1arr, leve21arr ...)

 const data = [ { level1arr: [ { level2arr: [{ id: 1, isValid: true }, { id: 2, isValid: true }, { id: 3, isValid: true }], }, { level2arr: [{ id: 4, isValid: true }, { id: 5, isValid: true }, { id: 6, isValid: true }], }, ], }, { level1arr: [ { level2arr: [{ id: 7, isValid: true }, { id: 8, isValid: true }, { id: 9, isValid: true }], }, { level2arr: [{ id: 10, isValid: true }, { id: 11, isValid: true }, { id: 12, isValid: true }], }, ], }, ];

También tengo otra matriz:

 const invalidIds = [2,5]

Quiero encontrar elementos con una identificación apecyfic y cambiar la propiedad isValid a false. ¿Es mejor que iterar sobre múltiples matrices anidadas, así:

 data.forEach(lvl1 => { lvl1.level1arr.forEach(lvl2 => { lvl2.level2arr.forEach(element => { // further nesting }); }); })

Esta iteración sobre varias matrices no es buena para el rendimiento. ¿Cuál es la mejor manera de manejar este caso con matrices anidadas?

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

0

Si se tratara de matrices anidadas, podría usar Array.prototype.flat() . Sin embargo, tiene una combinación de matrices y objetos anidados. Tendrá que escribir un "aplanador" personalizado para esta estructura de datos. Verifique esta respuesta para obtener más detalles: ¿cómo convertir este objeto anidado en un objeto plano?

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede usar la recursividad hasta que alcance el nivel que necesita. Esta es una forma de hacerlo.

 const data = [{ level1arr: [{ level2arr: [{ id: 1, isValid: true }, { id: 2, isValid: true }, { id: 3, isValid: true }], }, { level2arr: [{ id: 4, isValid: true }, { id: 5, isValid: true }, { id: 6, isValid: true }], }, ], }, { level1arr: [{ level2arr: [{ id: 7, isValid: true }, { id: 8, isValid: true }, { id: 9, isValid: true }], }, { level2arr: [{ id: 10, isValid: true }, { id: 11, isValid: true }, { id: 12, isValid: true }], }, ], }, ]; const invalidIds =[2,5] const findId = (object, key, value) => { if (Array.isArray(object)) { for (const obj of object) { findId(obj, key, value); } } else { if (object.hasOwnProperty(key) && object[key] === value) { object.isValid = false; return object } for (const k of Object.keys(object)) { if (typeof object[k] === "object") { findId(object[k], key, value); } } } } invalidIds.forEach(id => findId(data, "id", id)) console.log(data)

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