Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] Exercício: Acessando e modificando elementos de um array

import { createInterface } from "readline";

const rl = createInterface({
  input: process.stdin,
  output: process.stdout,
});

const perguntar = (pergunta) => {
  return new Promise((resolve) => {
    rl.question(pergunta, resolve);
  });
};

const validarTexto = (input) => {
  const produto = input.trim().toUpperCase();

  if (produto.length > 1 && /^[a-zA-ZÀ-ÿ\s-]+$/.test(produto)) return produto;
  return null;
};

const aguardarLista = (ms) => {
  console.log("Processando sua lista...");
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve();
    }, ms);
  });
};

const alterarUltimo = (listaCompras) => {
  if (listaCompras.length === 0) throw new Error("Sua lista está vazia");

  listaCompras[listaCompras.length - 1] = "MODIFICADO";
};

const imprimirLista = (listaCompras) => {
  console.log("\nAqui está sua lista de compras:");

  listaCompras.forEach((produto, i) => {
    console.log(`${i + 1}. ${produto}`);
  });
};

const obterSegundoItem = (listaCompras) => {
  if (listaCompras.length > 1) {
    return `\nO segundo item da sua lista é ${listaCompras[1]}`;
  }

  return `Sua lista de compras possui apenas ${listaCompras[0]}`;
};

const main = async () => {
  try {
    console.log("LISTA DE COMPRAS");
    console.log("Diga o que irá comprar e nós criamos sua lista!");
    console.log("[enviar 'FIM' interrompe as inserções]\n");

    const listaCompras = [];

    while (true) {
      const input = await perguntar("> ");

      if (input.trim().toUpperCase() === "FIM") break;

      const produto = validarTexto(input);

      if (produto === null) {
        console.log("Insira apenas produtos existentes!");
        continue;
      }

      listaCompras.push(produto);
    }

    await aguardarLista(4000);

    alterarUltimo(listaCompras);

    imprimirLista(listaCompras);

    console.log(obterSegundoItem(listaCompras));
  } catch (err) {
    if (err instanceof Error) console.log(err.message);
    else console.log("Algo deu errado. Reinicie a aplicação");
  } finally {
    rl.close();
  }
};

main();
1 resposta
solução!

Oi, Vitor.

Meus parabéns por concluir este exercício de forma tão completa. É muito satisfatório ver como você elevou o desafio de arrays para um nível de aplicação real, demonstrando um domínio bom sobre JavaScript assíncrono, manipulação de listas e validação de dados.

A sua resolução mostra que você compreendeu perfeitamente como acessar e modificar elementos, utilizando a lógica de índices de forma precisa. O uso de Promise e async/await para lidar com a interface de leitura torna o seu código muito mais moderno e alinhado com o que o mercado utiliza hoje.

Pontos bacanas:

  • Lógica de índices: Você aplicou corretamente o conceito de que arrays em JavaScript começam no índice 0, acessando o segundo item com listaCompras[1] e o último com listaCompras.length - 1.
  • Modularização: Separar as responsabilidades em funções como validarTexto, alterarUltimo e imprimirLista facilita muito a leitura e a manutenção futura do código.
  • Tratamento de erros e validação: O uso de try/catch e a validação com expressões regulares (regex) garantem que a aplicação não quebre com entradas inesperadas, o que demonstra maturidade no desenvolvimento.
  • Interface amigável: A função aguardarLista com setTimeout cria uma experiência de uso mais fluida, simulando um processamento real.

Conseguiu perceber como a estrutura de repetição while(true) combinada com o break é um jeito muito bacana de criar menus e interações que dependem da decisão do usuário?

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!