Valores repetidos array em JavaScript
Olá pessoal! estou tentando fazer uma condicional para caso no array com números inteiros tiver números repetidos, remova esses números, e se caso o array não possuir números repetidos, retorne um array vazio.
Até consegui fazer com que números repetidos fossem removidos, porém, não consegui fazer com que retornasse um array vazio, não estou conseguindo encontrar a lógica...
Até consegui fazer com que números repetidos fossem removidos, porém, não consegui fazer com que retornasse um array vazio, não estou conseguindo encontrar a lógica...
let array = [1, 2, 3, 4, 4]; const resultado = array.filter((value, indice) => { if(array.indexOf(value) === array.lastIndexOf(value)){ return value; } else if (array.indexOf(value) ==! array.lastIndexOf(value)) { return 0; } }); console.log(resultado);
Jorge
Curtidas 0
Melhor post
Arthur Heinrich
17/08/2023
Eu não conheço java script, mas posso imaginar um algoritmo.
Você pode começar criando uma cópia do seu array, para não perder a lista original:
let array = [1, 2, 3, 4, 4];
let resultado = array;
Obs.: Eu não teria utilizado uma variável com o nome "array" pois pode confundir, já que é uma palavra reservada em algumas linguagens.
No seu caso, o array já foi criado com os elementos em ordem. Porém, poderiam não estar. Então, você precisa ordenar os elementos.
Vou supor que você pudesse ter feito isso durante a cópia, fazendo:
let resultado = array.sort();
Agora que os elementos estão em ordem, você precisa varrer o array em busca dos repetidos. Supondo que os elementos possam ser acessados pelos índices de 0 a 4.
let i = 1;
let repetido = false;
while (i < resultado.count )
if (resultado[i-1] == resultado[i])
{ let repetido = true;
resultado.delete(i);
}
else
let i = i+1
if repetido
return []
else
return resultado;
Você pode começar criando uma cópia do seu array, para não perder a lista original:
let array = [1, 2, 3, 4, 4];
let resultado = array;
Obs.: Eu não teria utilizado uma variável com o nome "array" pois pode confundir, já que é uma palavra reservada em algumas linguagens.
No seu caso, o array já foi criado com os elementos em ordem. Porém, poderiam não estar. Então, você precisa ordenar os elementos.
Vou supor que você pudesse ter feito isso durante a cópia, fazendo:
let resultado = array.sort();
Agora que os elementos estão em ordem, você precisa varrer o array em busca dos repetidos. Supondo que os elementos possam ser acessados pelos índices de 0 a 4.
let i = 1;
let repetido = false;
while (i < resultado.count )
if (resultado[i-1] == resultado[i])
{ let repetido = true;
resultado.delete(i);
}
else
let i = i+1
if repetido
return []
else
return resultado;
GOSTEI 1
Mais Respostas
Diego Marinho
17/08/2023
Então ...
Têm dois erros nesse código.
Note essa linha do código :
Oque ela tá faz ? Ela retorna para a constante resultado valores únicos. Note ! Se o indexOf for o mesmo que o lastIndexOf , então ela retorna o "value" para resultado, se não ela não retorna.
.
Ex: em uma array [ 100, 200, 400, 300, 200] o valor 200 não irá retornar pq essa condicional irá apontar que o 200 da posição array[1], indexOf não é o mesmo 200 que está posição array[4].
Já o 100 irá retornar pq o 100 é o primeiro e o último, ele é tanto o indexOf e o lastIndexOf.
Sendo assim a seguinte linha, não faz sentido :
Isso pq a primeira condicional sempre irá acontecer.
Acho que a forma mais simples de resolver esse código , é após resolver receber o filter, vc testar o length dos arrays... Assim
Têm dois erros nesse código.
Note essa linha do código :
if(array.indexOf(value) === array.lastIndexOf(value)){ return value}
Oque ela tá faz ? Ela retorna para a constante resultado valores únicos. Note ! Se o indexOf for o mesmo que o lastIndexOf , então ela retorna o "value" para resultado, se não ela não retorna.
.
Ex: em uma array [ 100, 200, 400, 300, 200] o valor 200 não irá retornar pq essa condicional irá apontar que o 200 da posição array[1], indexOf não é o mesmo 200 que está posição array[4].
Já o 100 irá retornar pq o 100 é o primeiro e o último, ele é tanto o indexOf e o lastIndexOf.
Sendo assim a seguinte linha, não faz sentido :
else if (array.indexOf(value) ==! array.lastIndexOf(value)) { return 0; }
Isso pq a primeira condicional sempre irá acontecer.
Acho que a forma mais simples de resolver esse código , é após resolver receber o filter, vc testar o length dos arrays... Assim
// OS VALORES 10 E 20 SE REPETEM NO ARRAY ABAIXO const arrayInicial = [6, 4, 2, 8, 10, 10 ,12, 13, 20, 20 ,10 ,20 ,30]; // CRIEI UMA FUNÇÃO FEREFICAR ARRAY function verificarArray(a){ // FAÇO A MESMA COISA QUE VC FEZ E TESTO SE O VALOR É ÚNICO , EXCLUO AQUELE ELSE const resultado = a.filter((value) => { if(a.indexOf(value) === a.lastIndexOf(value)){ return value; } }); // APÓS COLOCAR OS VALORES ÚNICOS NA CONSTANTE "RESULTADO", FAÇO O SEGUINTE TESTE: // SE "RESULTADO" TIVER O MESMO TAMANHO DO "ARRAYINICIAL" SIGNIFICA QUE ELE NÃO POSSUI VALORES REPETIDOS, LOGO DEVERÁ RETORNAR UM ARRAY VAZIO // SE O TAMANHO DE "RESULTADO" FOR DIFERENTE DO TAMANHO DO "ARRAYINICIAL", SIGNIFICA QUE "ARRAYINICIAL" POSSUI NÚMEROS REPETIDOS; RETORNO RESULTADO if( resultado.length === a.length ) return [] else return resultado } console.log(verificarArray(arrayInicial));
GOSTEI 0