[RESOLVIDO] Como remover caracteres de uma array em Javascript?

6 respostas Resolvido
javascript
M

Bom dia,

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?

Obrigada!

6 Respostas

hugokotsubo
Solucao aceita

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).

M

Muito obrigada pela ajuda!
Já deu correcto. :grinning:

Joao_Nunes1

Olá, sou muito novo nisto. Eu percebi este código:

function extractPassword(array) {
    var novo = []; // array que vai ter  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 :face_with_raised_eyebrow::

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?

Obrigado :slightly_smiling_face:

hugokotsubo

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).

G

Boa tarde,

escrevi este código mesmo assim continua a dar errado:

var password = ([“a”,“-”,“~”,“1”,“a”,“/”,“~”,“A”,“7”,“/”,“C”]);

var newpassword = []
var arrayLength= password.length;

function extractPassword(password){

for(var i = 0; i < arrayLength; i++ ){
       var j = password[i];
       
    if(  ('a' <= j && j <= 'z')
      || ('A' <= j && j <= 'Z')
      || ('0' <= j && j <= '9')){
        newpassword.push(j);
    }
}
    return newpassword.join("");

}

console.log( extractPassword([‘a’,‘-’,‘~’,‘1’,‘a’,‘/’,‘~’,‘A’,‘7’,‘/’,‘C’]));

Output

Code is incorrect

Your function is not returning the correct value

a1aA7C

Alguem consegue ajudar que não consigo sair daqui a 3 dias ???

L
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);
Criado 24 de novembro de 2020
Ultima resposta 14 de jul. de 2023
Respostas 6
Participantes 5