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

411
Vistas
Función recursiva y React en Crome debug VM: un desastre

Primero, déjame explicarte lo que quiero hacer. Tengo una estructura de datos similar a un árbol, con una profundidad arbitraria a partir de la cual quiero hacer una lista de todas las ramas que no son hojas que paso como accesorios al componente secundario. El conjunto de datos y la función recursiva se encuentran a continuación.

Problema: ¡Obtengo el doble de datos en la matriz! Noté que la función getBranches() también se llama en Chrome VM y simplemente agrega los mismos datos nuevamente a la matriz ya existente. Ver foto abajo. ¿Es mi enfoque fundamentalmente incorrecto? ¿Qué hacer?

 const treeData = { 'first-level-node-1': { // key label: 'Regija', type: TYPES[1], index: 0, // rendering order url: 'http://opa.com', nodes: { 'second-level-node-1': { label: 'Bolnica BN', index: 0, type: 1, nodes: { 'third-level-node-1': { label: 'Konektor Sysmex', index: 0, nodes: {}, type: TYPES[0] }, }, }, }, }, 'first-level-node-2': { label: 'Regija 2', index: 1, type: TYPES[1], nodes: { '2-1': { label: 'Dz Trebinje', index: 0, type: 1, nodes: { '3-1': { label: 'Konektor Biomerux', index: 0, hasNodes: false, type: TYPES[0], } } } } },

};

Mi función getBranches() :

 const getBranches = (treeData) => { console.log('i= ',i++) Object.keys(treeData).forEach((key) => { if (treeData[key].type!==TYPES[0]) { branches.push({key: key, label: treeData[key].label}); console.log({key: key, label: treeData[key].label}) treeData[key].nodes && getBranches(treeData[key].nodes) }; }); return [...branches];

};

Mi componente:

 const Sites = () => { const branches = getBranches(treeData); console.log(branches); //const [data, setData] = useState(treeData); return ( <Container fluid="md"> <Row> <Col> <MyTreeView data={treeData}/> </Col> <Col> <BranchView sites={treeData} parentList={branches} /> </Col> </Row> </Container> );

};

Alguna información adicional:

rama vs hoja se distingue por type de propiedad

La imagen. Fíjate en la i

La imagen. Fíjate en las i

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

0

Supongo que el problema es simplemente que no declara branches dentro de su función, lo que la convierte en una variable global. Entonces, la próxima vez que se ejecute la función, la agregará. Agregar una declaración const probablemente debería ser suficiente.

Dicho esto, creo que puedes simplificar getBranches de manera limpia:

 const getBranches = (o) => Object .entries (o) .flatMap ( ([key, {label, type, nodes}]) => [ ... (type == TYPES [0] ? [] : [{key, label}]), ... (nodes ? getBranches (nodes) : []) ] ) const TYPES = [0, 1] const treeData = {"first-level-node-1": {label: "Regija", type: TYPES[1], index: 0, url: "http: //opa.com", nodes: {"second-level-node-1": {label: "Bolnica BN", index: 0, type: 1, nodes: {"third-level-node-1": {label: "Konektor Sysmex", index: 0, nodes: {}, type: TYPES[0]}}}}}, "first-level-node-2": {label: "Regija 2", index: 1, type: TYPES[1], nodes: {"2-1": {label: "Dz Trebinje", index: 0, type: 1, nodes: {"3-1": {label: "Konektor Biomerux", index: 0, hasNodes: false, type: TYPES[0]}}}}}} console .log (getBranches (treeData))
 .as-console-wrapper {max-height: 100% !important; top: 0}

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