How to delete repeated numbers within a Javascript array?

Asked

Viewed 77 times

-1

I’m a beginner in Javascript and wanted to overcome the doubt about how to delete repeated numbers within an array. The solution I want to create is to make:

  • User type 10 numbers (without repeating)
  • Sort these numbers increasingly

numeros = []

function adicionar() {
  if (numeros.length >= 10) {
    window.alert('Não é possível inserir mais números.')
  } else {
    num = Number(document.getElementById('cNum').value)
    numeros.push(num)
  }
}

function ordenar() {
  if (numeros.length < 10) {
    window.alert('Números insuficientes. Digite mais números.')
  } else {
    let enumerados = numeros.sort(function(a, b) {
      return a - b // necessário função demonstrada dentro de sort()
    }) // números como o 10 seja considerado como '10' e não '1' e '0'
    let resp = document.getElementById('resposta')
    resp.innerHTML = `${enumerados}`
  }
}
<p>
  <label for="cNum">Digite alguns números, pois o programa irá ordená-los </label>
  <input type="number" name="tNum" id="cNum">
  <input type="button" value="adicionar" name="tAdc" id="cAdc" onclick="adicionar()">
</p>

<p>
  <input type="button" value="finalizar" name="tBot" id="cBot" onclick="ordenar()">
</p>

<output id="resposta"></output>

2 answers

2


Instead of removing you should think about efficiency and not add the repeated numbers:

numeros = []

function adicionar() {
  if (numeros.length >= 10) {
    window.alert('Não é possível inserir mais números.')
  } else {
    num = Number(document.getElementById('cNum').value)
    if (numeros.includes(num)) {
      window.alert('Número repetido já adicionado.');
    } else {
      numeros.push(num);
      document.getElementById('adicionados').innerHTML = `${numeros}`
    }
  }
}

function ordenar() {
  if (numeros.length < 10) {
    window.alert('Números insuficientes. Digite mais números.')
  } else {
    let enumerados = numeros.sort(function(a, b) {
      return a - b // necessário fazer a função dentro de sort()
    }) // números como o 10 sejam considerados como '10' e não '1' e '0'
    let resp = document.getElementById('resposta')
    resp.innerHTML = `${enumerados}`
  }
}
<p>
  <label for="cNum">Digite alguns números, pois o programa irá ordená-los </label>
  <input type="number" name="tNum" id="cNum">
  <input type="button" value="Adicionar" name="tAdc" id="cAdc" onclick="adicionar()">
</p>

<input type="button" value="Finalizar" name="tBot" id="cBot" onclick="ordenar()"></p>

Números adicionados:
<output id="adicionados"></output>
<br/><br/>
Números ordenados:
<output id="resposta"></output>

1

To do this, just check if the number already exists in the array numeros as follows:

function adicionar () {
  if (numeros.length >= 10 ) {
    window.alert('Não é possível inserir mais números.')
  } else {
    num = Number(document.getElementById('cNum').value)
    // Verifica se num não está em numeros
    if(!numeros.includes(num)) {
      numeros.push(num)
    }                        
  }
}

It is also possible to put alert in case the number has already been inserted to make the application more robust:

  if(!numeros.includes(num)) {
    numeros.push(num)
  }
  else {
    alert('Número já inserido')
  }

Browser other questions tagged

You are not signed in. Login or sign up in order to post.