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

252
Visualizações
Función de mapa recursivo para matriz anidada

Estoy tratando de crear una función de mapa que admita la computación de matrices anidadas, usando recursividad:

Esta función, cuando se usa una matriz unidimensional (por ejemplo, [1,2,3,4] ), funciona bien:

 const map = (oldArray, callback, newArray = []) => { //base case: check if there are any items left in the original array to process if (oldArray.length <= 0){ //if all items have been processed return the new array return newArray } else { //destructure the first item from old array and put remaining in a separate array const [item, ...theRest] = oldArray // create an array of the current new array and the result of the current item and the callback function const interimArray = [...newArray, callback(item)] // return a recursive call to to map to process the next item. return map(theRest, callback, interimArray) } }

Pero quiero admitir una matriz anidada, así que, por ejemplo, tengo una matriz como esta:

 const array = [1,[1,2],3]

y quiero aplicar una función, eg: (x)=>x+1;

Tengo esta implementación hasta ahora, pero no puedo entenderla.

 function rnMap(oldArr, fn, newArr = []) { const [item, ...rest] = oldArr; if (oldArr.length <= 0) { return newArr; } else if (Array.isArray(item)) { return rnMap(item, fn, [...newArr, rnMap(item, fn, [])]); } else { const interimArray = [...newArr, fn(item)]; return rnMap(rest, fn, interimArray); } } const rnRes = rnMap(nArr, (e) => { return e + 1; }); console.log(rnRes);

Devuelve [ 2, [ 2, 2 ], 2, 2 ] pero se supone que devuelve [2,[2,3],4]

Si alguien pudiera ayudarme se lo agradecería. Gracias por adelantado.

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

0

Sin enfoque de bucle, una especie de...

 const map = ([value, ...array], fn) => { if (value === undefined) return []; return [ (Array.isArray(value) ? map(value, fn) : fn(value)), ...map(array, fn) ]; }, array = [1, [1, 2], 3], fn = x => x + 1; console.log(map(array, fn));

about 4 years ago · Juan Pablo Isaza Relatório

0

Esta sería probablemente la solución más simple.

 // @ts-ignore const func = (list: Array<any>) => { return list.map(i => { if (i instanceof Array) { return func(i) } return i+1 }) } const result = func([1,[1,2],3]) console.log('log result', result)

Esto está escrito a typescript , avísame si quieres una versión js

about 4 years ago · Juan Pablo Isaza Relatório

0

Finalmente encontré el error, aquí está mi solución:

 function rnMap(oldArr, fn, newArr = []) { const [item, ...rest] = oldArr; if (oldArr.length <= 0) { return newArr; } else if (Array.isArray(item)) { return rnMap(rest, fn, [...newArr, rnMap(item, fn, [])]); } else { return rnMap(rest, fn, [...newArr, fn(item)]); } } const rnRes = rnMap([1, 2, [3, 4, [5, 6]], 7], (e) => { return e + 1; }); console.log(rnRes);
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