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

146
Visualizações
¿Cómo puedo numerar mis puntos y subpuntos que tienen una cantidad ilimitada de objetos anidados usando la función recursiva y js?

digamos que tengo datos algo como esto

 let data = [ { subPoint:[ { point:'point a 1.1', }, { point:'point a 1.2', }, { subPoint:[ { subPoint:[ { point:'point a 1.3.1.1' } ] }, { point:'point a 1.3.1.2' } ] }, ] }, { point:'point b 1' }, { point:'point c 1' }, { subPoint:[ { subPoint:[ { point:'point d 1.1.1' } ] } ] } ]

Mi resultado previsto debería ser algo como esto

 [ '1.1.1---point a 1.1', '1.1.2---point a 1.2', '1.1.3.1.1---point a 1.3.1.1', '1.1.3.1.2---point a 1.3.1.2', '2.1---point b 1', '3.1---point c 1', '4.1.1.1---point d 1.1.1' ]

Pero lo que obtengo es esto

 [ '1.3.1---point a 1.1', '1.3.2---point a 1.2', '1.3.3.1.1.1---point a 1.3.1.1', '1.3.3.1.2---point a 1.3.1.2', '2---point b 1', '3---point c 1', '4.1.1.1---point d 1.1.1' ]

mi código se ve así

 const getInfo = (starIndex,array) => { let rowId = starIndex array.forEach((val,ind) => { if(val.subPoint){ console.log(starIndex) rowId = starIndex+'.'+(ind+1) return getInfo(rowId,val.subPoint) } }) console.log('rowId',rowId) return rowId } let returnData = [] const getData = (_data,val) => { _data.forEach((_dat,index) => { let value = (val?`${val}.`:'')+`${index+1}` if(_dat.subPoint){ value = getInfo(value,_dat.subPoint) getData(_dat.subPoint,value) }else { returnData.push(value+ '---' + _dat.point) } }) return returnData } console.log(getData(data))

Creo que me falta algo o mi recursividad es mala. No estoy seguro de cuál es el problema.

Este es un código metafórico para un problema que tengo, el problema real tiene que ver con dar una identificación única para cada componente de la fila de la tabla que puede tener cualquier número de agrupaciones.

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Sin niveles extra.

 const getFlat = (parent = '') => ({ point, subPoint = [] }, i) => { const p = parent + (parent && '.') + (i + 1), children = subPoint.flatMap(getFlat(p)); if (point) children.unshift([p, point].join('---')); return children; }, data = [{ subPoint: [{ point: 'point a 1.1' }, { point: 'point a 1.2' }, { subPoint: [{ subPoint: [{ point: 'point a 1.3.1.1' }] }, { point: 'point a 1.3.1.2' }] }] }, { point: 'point b 1' }, { point: 'point c 1' }, { subPoint: [{ subPoint: [{ point: 'point d 1.1.1' }] }] }], result = data.flatMap(getFlat()); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Relatório

0

 const data = [ { subPoint: [ { point: 'point a 1.1', }, { point: 'point a 1.2', }, { subPoint: [ { subPoint: [ { point: 'point a 1.3.1.1', }, ], }, { point: 'point a 1.3.1.2', }, ], }, ], }, { point: 'point b 1', }, { point: 'point c 1', }, { subPoint: [ { subPoint: [ { point: 'point d 1.1.1', }, ], }, ], }, ]; const flatten = (data) => { let result = []; const recurse = (data, path = '') => { for (let i = 0; i < data.length; i++) { let item = data[i]; let newPath = path ? `${path}.${i + 1}` : `${i + 1}`; if (item.point) { result.push(`${newPath}---${item.point}`); } else { recurse(item.subPoint, newPath); } } }; recurse(data); return result; } console.log(flatten(data));

about 4 years ago · Juan Pablo Isaza Relatório

0

Este resultado no coincide con su solicitud, pero me parece mucho más lógico:

 [ "1.1---point a 1.1", "1.2---point a 1.2", "1.3.1.1---point a 1.3.1.1", "1.3.2---point a 1.3.1.2", "2---point b 1", "3---point c 1", "4.1.1---point d 1.1.1" ]

Si eso funciona para usted, aquí hay una recursividad simple que lo generará:

 const outline = (xs, path = []) => xs .flatMap (({point, subPoint = []}, i) => point ? [`${path .concat (i + 1) .join ('.')}---${point}`] : outline (subPoint, path .concat (i + 1)) ) const data = [{subPoint: [{point: "point a 1.1"}, {point: "point a 1.2"}, {subPoint: [{subPoint: [{point: "point a 1.3.1.1"}]}, {point: "point a 1.3.1.2"}]}]}, {point: "point b 1"}, {point: "point c 1"}, {subPoint: [{subPoint: [{point: "point d 1.1.1"}]}]}] console .log (outline (data))
 .as-console-wrapper {max-height: 100% !important; top: 0}

Hacemos un seguimiento de una ruta de ejecución, que puede contener valores como [2] o [1, 3, 1, 1] , y en cada llamada, si llegamos a un nodo con una propiedad de point , combinamos la ruta con esa cadena de propiedad . Si no lo hemos hecho, agregamos el índice actual (más uno para lidiar con el conteo basado en cero de JS) a la ruta y recurrimos a los elementos secundarios del nodo subPoint .

Si esa salida no funciona, ¿puede explicar exactamente de dónde proviene cada uno de los prefijos de esquema de destino?

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