Jump to content

Números repetidos Array.


Matheus Melgares

Postagens Recomendadas

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, 1, 4, 5, 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);

 

Editado por Matheus Melgares
Link to comment
Compartilhe em outros sites

Olá!

No caso, há duas interpretações pro seu problema...

 

1 - Você deseja remover todos os elementos repetidos , caso não haja nenhum repetido retornar array vazio? Ex: [1, 2, 1, 4, 5, 4] retorna [2, 5]; e [1, 2, 3] retorna []

const array = [1, 2, 3, 4, 5, 6];

function removerRepetidos(array) {
  let novoArray = [];
  novoArray = array.filter((value) => {
    if (array.indexOf(value) === array.lastIndexOf(value)) {
      return value;
    } else {
      return 0;
    }
  });

  if (novoArray.length === array.length) {
    return [];
  } else {
    return novoArray;
  }
}
const resultado = removerRepetidos(array);

console.log(resultado);

Nesse caso, para fazer as duas verificações, abstrai a lógica para uma função.

A primeira parte (filter e if) verifica os elementos repetidos e os remove, conforme o seu próprio código.

Já a segunda parte (if (novoArray.length === array.length)) verifica o comprimento do array original e do novo. Se foram iguais, significa que não há elementos repetidos, e retorna um array vazio. Caso contrário, retorna o novo array sem os elementos repetidos.

 

---

 

2 - Ou você deseja remover apenas as repetições que ocorrem, e ainda retornar array vazio caso não haja nenhum repetido? Ex: [1, 2, 1, 4, 5, 4] retorna [1, 2, 4, 5]; e [1, 2, 3] retorna []

const array = [1, 2, 1, 4, 5, 4];

function removerRepetidos(array) {
  let novoArray = [];
  novoArray = Array.from(new Set(array));

  if (novoArray.length === array.length) {
    return [];
  } else {
    return novoArray;
  }
}
const resultado = removerRepetidos(array);

console.log(resultado);

A diferença aqui é a parte da remoção de elementos repetidos. O anterior remove todos os elementos que possuam repetições, já este aqui remove apenas as repetições, mantendo os originais.

O método new Set cria uma coleção de elementos únicos, o que remove os repetidos. Após isso, é cercado por um Array.from (perceba que é com A maiúsculo), um método nativo do JavaScript para converter em array.

Ou seja, uma coleção de elementos únicos é criada com base no array recebido e, logo após, a coleção é convertida novamente em array.

A verificação para retornar array vazio caso não haja repetições se mantém igual.

 

Espero ter ajudado 🙂

  • Amei 2
Link to comment
Compartilhe em outros sites

Crie uma conta ou entre para comentar 😀

Você precisa ser um membro para deixar um comentário.

Crie a sua conta

Participe da nossa comunidade, crie sua conta.
É bem rápido!

Criar minha conta agora

Entrar

Você já tem uma conta?
Faça o login agora.

Entrar agora


×
×
  • Create New...