Estou a tentar fazer um bootcamp de programação e para isso tenho alguns exercícios para fazer. Neste momento estou com algumas dificuldades no seguinte exercício:
Create a function named extractPassword which takes an array of characters (which includes some trash characters) and returns a string with only valid characters (a - z, A - Z, 0 - 9).
Here’s an example:
extractPassword([‘a’, ‘-’, ‘~’, ‘1’, ‘a’, ‘/’]); // should return the string ‘a1a’
extractPassword([’~’, ‘A’, ‘7’, ‘/’, ‘C’]); // should return the string ‘A7C’
O que eu fiz até agora, mas ainda não está correcto, foi isto:
function extractPassword(array) {
return array.join("");
}
const result = extractPassword([’~’, ‘A’, ‘7’, ‘/’, ‘C’])
console.log(result);
Como faço para retirar os caracteres especiais da array, sendo que não posso utilizar regex?
join vai juntar todos os elementos do array, então antes de usar join você precisa filtrá-los e só deixar aqueles que são letras ou números.
Um jeito é criar outro array para isso:
function extractPassword(array) {
var novo = []; // array que vai ter só os caracteres válidos
for (var i = 0; i < array.length; i++) {
var c = array[i];
if (('a' <= c && c <= 'z') // se é letra minúscula
|| ('A' <= c && c <= 'Z') // ou letra maiúscula
|| ('0' <= c && c <= '9')) { // ou dígito de 0 a 9
novo.push(c); // se for válido, adiciona no array
}
}
return novo.join("");
}
Outra opção é usar filter, que retorna outro array contendo os elementos que satisfazem determinado critério:
function extractPassword(array) {
return array
.filter(c => ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || ('0' <= c && c <= '9'))
.join('');
}
Ele faz a mesma coisa do código anterior (cria outro array só com os caracteres válidos e junta tudo em uma string).
Olá, sou muito novo nisto. Eu percebi este código:
function extractPassword(array) {
var novo = []; // array que vai ter só os caracteres válidos
for (var i = 0; i < array.length; i++) {
var c = array[i];
if (('a' <= c && c <= 'z') // se é letra minúscula
|| ('A' <= c && c <= 'Z') // ou letra maiúscula
|| ('0' <= c && c <= '9')) { // ou dígito de 0 a 9
novo.push(c); // se for válido, adiciona no array
}
}
return novo.join("");
}
Mas não percebi o segundo :
function extractPassword(array) {
return array
.filter(c => ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || ('0' <= c && c <= '9'))
.join('');
}
Aqui o que significa o c? como não se declarou uma variável c = array[i], como é que o código funciona?
Ou ao escrever .filter(c => está-se a declarar essa variável e é por isso que se escreveu isso?
filter recebe uma função, e aplica essa função a cada um dos elementos do array.
Eu poderia fazer assim:
// função que verifica se o caractere é uma letra ou dígito
function isLetterOrDigit(c) {
return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || ('0' <= c && c <= '9');
}
function extractPassword(array) {
return array
// uso a função acima para filtrar
.filter(isLetterOrDigit)
.join('');
}
Ou seja, para cada elemento do array, o filter chama a função isLetterOrDigit e retorna outro array com somente os elementos para os quais a função retornou true.
Só que em vez de criar uma função explicitamente, com nome e tudo, posso usar uma arrow function. Ou seja, em vez de function f(c) { return faz_algo_com_c }, eu posso fazer c => faz_algo_com_c. Esse c é o parâmetro da função (é o que vai ser substituído por cada elemento do array, quando o filter for percorrê-lo).
function extracPassword(array){
//Todos os caracetres Especiais a serem removidos
const caracteresEspeciais = [“~”,“/”,“*”,“&”,“#”,“@”,“!”];
//filtrar itens do array e comparar com operador de negação, o includes verifica se os indices do array é iguais .
const resultado = array.filter((item)=> !caracteresEspeciais.includes(item));
return resultado;
}
const result = extracPassword([“~”,“A”,“7”,“/”,“C”]);
console.log(result);