Valores repetidos array em JavaScript

JavaScript

17/08/2023

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

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

Jorge

Curtidas 0

Melhor post

Arthur Heinrich

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;
GOSTEI 1

Mais Respostas

Diego Marinho

Diego Marinho

17/08/2023

Então ...
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
POSTAR