Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Tentando fazer com a refatoração do capítulo passado

No capítulo passado, houve uma atividade de refatoração da função pegaArquivo(), onde ela agora pega todos os arquivos de um diretório, como mostrado a seguir:

async function pegaArquivos(caminho) {
    const caminhoAbsoluto = path.join("__dirname", '..', caminho);
    const encoding = 'utf-8';
    try {
         const arquivos = await fs.promises.readdir(caminhoAbsoluto, { encoding });
         const result = await Promise.all(arquivos.map(async (arquivo) => {
         const localArquivo = `${caminhoAbsoluto}/${arquivo}`;
         const texto = await fs.promises.readFile(localArquivo, encoding);
         return extraiLinks(texto);
     }));
     return result;
     } catch (erro) {
     return trataErro(erro);
 }
 } 

Obs: O package.json também foi alterado para:

"cli": "node cli.js ./arquivos/"

No entanto, não é possível utilizar a função validaURLs da forma que ela está, pois o resultado da função pegaArquivos é um array de arrays. Eu consegui contornar este problema da seguinte forma:

function geraArrayURLs(arrayLinks) {
    let atual = 0;
    let arrayResultado = []
    while (atual < arrayLinks.length) {
        let arrayAtual = arrayLinks[atual];
        arrayResultado.push(arrayAtual.map(objetoLink => Object.values(objetoLink).join()));
        atual++
    }
    return arrayResultado
}

Eu criei um segundo arquivo chamado texto2.md na pasta arquivos contendo [Google](http://www.google.com)\ e então executei o comando npm run cli validar, e o resultado disso tudo fica:

links validados [
  [
    [ 'https://developer.mozilla.org/pt-BR/docs/Web/API/FileList' ],
    [
      'https://developer.mozilla.org/pt-BR/docs/Web/HTML/Element/Input'
    ],
    [ 'https://developer.mozilla.org/pt-BR/docs/Web/API/DataTransfer' ],
    [
      'https://developer.mozilla.org/pt-BR/docs/Web/API/HTMLCanvasElement'
    ],
    [
      'https://developer.mozilla.org/pt-BR/docs/Web/API/File#implementation_notes'
    ]
  ],
  [ [ 'http://www.google.com' ] ]
]

Como eu faço para unir os dois arrays dentro de um só?

2 respostas
solução!

Consegui resolver com a solução disponibilizada no site https://www.jstips.co/en/javascript/flattening-multidimensional-arrays-in-javascript/ , alterando o a função geraArrayURLs para:

function geraArrayURLs(arrayLinks) {
    let atual = 0;
    let arrayResultado = []
    while (atual < arrayLinks.length) {
        let arrayAtual = arrayLinks[atual];
        arrayResultado.push(arrayAtual.map(objetoLink => Object.values(objetoLink).join()));
        atual++
    }
    let arrayFinal = [].concat(...arrayResultado)
    return arrayFinal
}

Com isto tive o retorno:

links validados [
  'https://developer.mozilla.org/pt-BR/docs/Web/API/FileList',
  'https://developer.mozilla.org/pt-BR/docs/Web/HTML/Element/Input',
  'https://developer.mozilla.org/pt-BR/docs/Web/API/DataTransfer',
  'https://developer.mozilla.org/pt-BR/docs/Web/API/HTMLCanvasElement',
  'https://developer.mozilla.org/pt-BR/docs/Web/API/File#implementation_notes',
  'http://www.google.com'
]

Espero ter ajudado alguém.

vlw mano, me ajudou!!!